2008-10-04 12 views

Respuesta

33

Hay un buen artículo sobre JavaScript and memory leaks. No es específico sobre el navegador, sino que describe toda la problemática de las pérdidas de memoria y JavaScript.

Creo que es un mejor enfoque a ser tan navegador no específica como sea posible insted de optimizar por algunos navegadores, al desarrollar una sitio web para el público.

+0

Excelente artículo sobre el tema.+1 – AnthonyWJones

+0

Y para cualquiera que esté interesado en IE8, podría valer la pena saber que la mayoría del ejemplo explicado en el artículo ya no está perdiendo memoria en IE8. Debe leer esto: http://stackoverflow.com/questions/1999840/javascript-circular-references-and-memory-leaks/2000467#2000467 –

3

En general; las referencias circulares son la causa de muchos problemas. Recuerdo IE 6 (no estoy seguro si se aplica a 7) goteando bastante mal con XMLHTTP ... estableciendo onreadystatechange = null una vez que se terminó con la reparación.

+0

Si el problema se aplica a 7. Y no se puede asignar nula ya que no es una función que necesita una función de función void() {} que ha sido creado en el ámbito global y/o asignar nulo a la variable que contiene una referencia al objeto xmlhttp. – AnthonyWJones

22

Aquí es una pérdida de memoria clásico en el IE: -

function body_onload() 
{ 
    var elem = document.getElementById('someElementId'); 
    // do stuff with elem 
    elem.onclick = function() { 
     //Some code that doesn't need the elem variable 
    } 
} 

Después de este código se ejecute hay referencia circular porque un elemento tiene una función asignada su evento onclick que hace referencia a un objeto alcance que a su vez tiene una referencia al elemento. objetos

someElement-> onClick> función alcance-> elem-> someElement recuento de referencias

En los elementos DOM IE se basan COM que el Javascript GC no puede limpiar.

La adición de una línea final en el código anterior sería limpiarlo: -

var elem = null; 
Cuestiones relacionadas