Problem z pamięcią JavaScript na płótnie

używamgetImageData/putImageData na płótnie HTML5, aby móc manipulować obrazem. Moim problemem jest to, że przeglądarka nigdy nie wydaje sięuwolnij pamięć. Dopóki nie zamknę karty (testowanej w Chrome i Operze).

Przeniesiono je z funkcji:

 var ctx = document.getElementById('leif').getContext('2d');
 var imgd = ctx.getImageData(0,0,width,height);
 var pix = imgd.data;
 var rndpixel = 0;

i problem zniknął!

function infiniteLeif()
{
  for (var i = 0; i<65536; i+=4) {
    rndpixel=Math.floor(Math.random()*(width*(height-2))+width+4) * 4;
    pix[rndpixel-wx4] = pix[rndpixel]; pix[rndpixel-wx4+1] = pix[rndpixel+1]; pix[rndpixel-wx4+2] = pix[rndpixel+2];
    pix[rndpixel+wx4] = pix[rndpixel]; pix[rndpixel+wx4+1] = pix[rndpixel+1]; pix[rndpixel+wx4+2] = pix[rndpixel+2];
    pix[rndpixel-4] = pix[rndpixel]; pix[rndpixel-4+1] = pix[rndpixel+1]; pix[rndpixel-4+2] = pix[rndpixel+2];
    pix[rndpixel+4] = pix[rndpixel]; pix[rndpixel+4+1] = pix[rndpixel+1]; pix[rndpixel+4+2] = pix[rndpixel+2];
  }

  ctx.putImageData(imgd,0,0);
  if (go==1) t=setTimeout(infiniteLeif,40);
}

Pełnaprzykład można znaleźć tutaj (Zaleca się Google Chrome).

To nie jestsetTimeout to jest problem, ponieważ próbowałem pętli z tym samym efektem.

Zrozumiałem, że usuwanie odniesień cyklicznych jest często kluczem, ale czy naprawdę mam taki? Jak mogę zmienić ten kod, abyGC JavaScript dostaje szansę na swoją pracę?

questionAnswers(1)

yourAnswerToTheQuestion