¿Sabes lo que puede causar pérdidas de memoria en JavaScript? Estoy interesado en los navegadores: IE 7, FireFox 3, Safari 3¿Sabes lo que puede causar pérdidas de memoria en JavaScript?
Respuesta
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.
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.
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
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;
Puede comprobar this artículo de MSDN para los patrones de pérdida de memoria de Internet Explorer. También hay algunas herramientas para la detección de fugas de memoria:
Usted está tratando con 2 tipos de objetos (y 2 colectores de basura), JavaScript y DOM objetos, que pueden referirse entre sí (la referencia circular), y entonces ninguno de los GC puede ocuparse de todos sus objetos incluso cuando la página se descarga. Aquí hay una buena descripción:
http://getben.com/archive/2006/05/30/Resolving-JavaScript-Memory-Leaks.aspx
http://www.josh-davis.org/2007/04/11/javascript-built-in-listeners-and-memory-leaks/
- 1. ¿Utilizará goto para causar pérdidas de memoria?
- 2. ¿Cómo puedo evitar causar pérdidas de memoria en Firefox?
- 3. Javascript a pérdidas de memoria
- 4. ¿Cuáles son algunas formas comunes de causar pérdidas de memoria usando JQuery/JavaScript?
- 5. javascript, referencias circulares y pérdidas de memoria
- 6. ¿Puede jQuery.data causar una pérdida de memoria?
- 7. pérdidas de memoria en Microsoft.FSharp.Control.Mailbox?
- 8. ¿Qué podría causar daños en la memoria en JavaScript?
- 9. SoundPlayer provocando pérdidas de memoria?
- 10. C#: simular pérdidas de memoria
- 11. SBJson - ¿Tiene pérdidas de memoria?
- 12. Evitar pérdidas de memoria Scala - Scala constructores
- 13. Las pérdidas de memoria en Firefox addons
- 14. ¿Pueden los delegados causar una pérdida de memoria? GC.TotalMemory (verdadero) por lo que parece indicar
- 15. Controlador de eventos y pérdidas de memoria
- 16. ¿Manipulación de cadenas sin pérdidas de memoria?
- 17. Android Surfaceview Hilos y pérdidas de memoria
- 18. ¿Qué puede causar java.lang.NoClassDefFoundError?
- 19. La adición/eliminación cíclica de nodos DOM causa pérdidas de memoria en JavaScript?
- 20. Herramientas para pérdidas de memoria en .Net ejecutable
- 21. Factores principales para las pérdidas de memoria en Rails
- 22. ¿Cómo puedo encontrar pérdidas de memoria en mi programa Python?
- 23. inyección de CSS: ¿qué es lo peor que puede pasar?
- 24. ¿Cómo resuelvo las pérdidas de memoria que se informa que residen en la cadena STL?
- 25. ¿Evita las pérdidas de memoria en las devoluciones de llamada?
- 26. lo que innerHTML está haciendo en javascript?
- 27. ¿Cómo identificar las pérdidas de memoria en Android?
- 28. ¿Por qué el uso de "nuevo" causa pérdidas de memoria?
- 29. ¿Puede el uso de demasiadas variables estáticas causar una pérdida de memoria en Java?
- 30. ¿Qué puede causar fugas en la manija de la sección?
Excelente artículo sobre el tema.+1 – AnthonyWJones
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 –