Problema de memoria de JavaScript con el lienzo

Estoy usandogetImageData/putImageData en un lienzo HTML5 para poder manipular una imagen. Mi problema es que el navegador nunca pareceliberar cualquier memoria. No hasta que cierre la pestaña (probado en Chrome y Opera).

Movido estos fuera de la función:

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

¡Y el problema desapareció!

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);
}

Una completael ejemplo se puede encontrar aquí (Se recomienda Google Chrome).

No es elsetTimeout Ese es el problema porque probé un bucle con el mismo efecto.

He llegado a comprender que la eliminación de referencias circulares a menudo es la clave, pero ¿realmente tengo una? ¿Cómo puedo cambiar este código para que elJavaScript GC tiene la oportunidad de hacer su trabajo?

Respuestas a la pregunta(1)

Su respuesta a la pregunta