recorrer objetos objeto metodos lista eliminar elemento delete buscar array agregar javascript object destroy

objetos - ¿Cómo destruir un objeto de JavaScript?



recorrer array de objetos javascript (5)

Estaba enfrentando un problema como este, y tuve la idea de simplemente cambiar el HTML interno de los hijos del objeto problemático.

adiv.innerHTML = "<div...> the original html that js uses </div>";

Parece sucio, pero me salvó la vida, ¡ya que funciona!

Recientemente, me encontré con una aplicación que consume demasiada memoria y aumenta en 10 MB / seg.

Entonces, me gusta saber la mejor manera de destruir el objeto JavaScript y las variables para que el consumo de memoria se mantenga bajo y mi FF no pueda ser destruido.

Estoy llamando a dos de mis JavaScript en cada intervalo de 8 segundos sin volver a cargar la página.

function refresh() { $(''#table_info'').remove(); $(''#table'').hide(); if (refreshTimer) { clearTimeout(refreshTimer); refreshTimer = null ; } document.getElementById(''refresh_topology'').disabled=true; $(''<div id="preload_xml"></div>'').html(''<img src="pic/dataload.gif" alt="loading data" /><h3>Loading Data...</h3>'').prependTo($("#td_123")); $("#topo").hide(); $(''#root'').remove(); show_topology(); }

¿Cómo puedo ver qué variable causa sobrecarga de memoria y método para detener la ejecución de ese proceso?


Estructure su código para que todos sus objetos temporales se ubiquen dentro de cierres en lugar de espacio de nombres global / propiedades de objetos globales y salga del alcance cuando haya terminado con ellos. GC se encargará del resto.


No puede eliminar objetos, se eliminan cuando ya no hay más referencias a ellos. Puede eliminar referencias con delete .

Sin embargo, si ha creado referencias circulares en sus objetos, es posible que deba desvincular algunas cosas.


Podrías poner todo tu código en un espacio de nombres como este:

var namespace = {}; namespace.someClassObj = {}; delete namespace.someClassObj;

El uso de la palabra clave delete eliminará la referencia a la propiedad, pero en el nivel bajo, el recolector de basura (GC) de JavaScript obtendrá más información sobre qué objetos reclamar.

También puede usar las Herramientas de desarrollo de Chrome para obtener un perfil de memoria de su aplicación, y qué objetos en su aplicación necesitan reducirse.


Si bien las respuestas existentes dieron soluciones para resolver el problema y la segunda mitad de la pregunta, no proporcionan una respuesta al aspecto de auto descubrimiento de la primera mitad de la pregunta que está en negrita: "¿Cómo puedo ver qué causa de la variable? ¿Sobrecarga de memoria ...?

Puede que no haya sido tan robusto hace 3 años, pero la sección " Perfiles " de Chrome Devevloper Tools ahora es bastante poderosa y rica en funciones. El equipo de Chrome tiene un artículo perspicaz sobre su uso y, por lo tanto, también sobre cómo funciona la recolección de basura (GC) en JavaScript, que es el núcleo de esta pregunta.

Dado que delete es básicamente la raíz de la respuesta actualmente aceptada por Yochai Akoka, es importante recordar lo que hace eliminar. Es irrelevante si no se combina con los conceptos de cómo funciona GC en las siguientes dos respuestas: si hay una referencia existente a un objeto, no se limpia. Las respuestas son más correctas, pero probablemente no tan apreciadas porque requieren más reflexión que solo escribir ''borrar''. Sí, una posible solución puede ser utilizar delete , pero no importará si hay otra referencia a la pérdida de memoria.

delicateLatticeworkFever menciona adecuadamente las referencias circulares y la documentación del equipo de Chrome puede proporcionar mucha más claridad, así como las herramientas para verificar la causa.

Como se mencionó la delete aquí, también puede ser útil proporcionar el recurso Descripción de la eliminación . Aunque NO entra en ninguna solución real que esté realmente relacionada con el GC de js.