Soy consciente de que no es fácil de manejar correctamente la memoria dentro de una aplicación con gran cantidad de elementos de interfaz de usuario y completamente basado en Ajax (en mi aplicación las páginas no se vuelven a cargar). Pero me gustaría entender el siguiente comportamiento:jQuery.remove(), separe los elementos DOM, pero aún puedo acceder a los elementos desde el código. ¿Cómo evitar fugas?
Tengo un elemento raíz al que debe adjuntarse un solo elemento secundario a la vez (piense que es el elemento raíz el contenedor de la aplicación y el elemento secundario las páginas únicas). Cada vez que cambio de contenido secundario, elimino el contenido anterior con jQuery.remove(), pero veo que el contenido está realmente separado del DOM, pero permanece en la memoria.
- raíz y dos contenidos niño (child1 y CHILD2)
- de child1 me cambio a CHILD2, pidiéndole a mi gestor de aplicaciones para eliminar child1 antes de acoplar se adjunta child2
- child2 (puedo verlo), pero todavía puedo utilizar elementos child1 del código que maneja
código child1 child1 (que contiene referencias a child1 DOM):
function testaccess(){
load_and_remove(child2);
var child1DOM = get_this_dom();
}
child1DOM sigue ahí, y puede manipularla como si todavía estaba unido a la DOM.
Ok, supongo que jQuery.remove() y el GC no podrán liberar memoria hasta que tenga un código que pueda acceder a ella, pero incluso si no invoco get_this_dom(), incluso después de salir de testaccess(), veo que la memoria FF no disminuye ...
me pregunto cómo hacer GC liberar toda la memoria, cuando salgo child1.
un vistazo rápido a la derecha "relacionadas" Preguntas enlaces reveló un caso similar -> http://stackoverflow.com/q/768621/104380 – vsync