Sono consapevole che non è facile gestire correttamente la memoria all'interno di un'applicazione con molti elementi dell'interfaccia utente e completamente basata su Ajax (nella mia app le pagine non vengono mai ricaricate). Ma mi piacerebbe capire il seguente comportamento:jQuery.remove(), separa elementi DOM, ma posso ancora accedere agli elementi dal codice. Come evitare le perdite?
Ho un elemento radice a cui un elemento figlio singolo alla volta deve essere collegato (pensarlo come l'elemento principale è il contenitore dell'app e le pagine singole di child). Ogni volta che passo da un contenuto figlio all'altro, rimuovo il contenuto precedente con jQuery.remove(), ma vedo che il contenuto è in realtà staccato dal DOM ma rimane in memoria.
- radice e due contenuti figlio (child1 e child2)
- da child1 posso passare a child2, chiedendo il mio manager app per rimuovere child1 prima di fissare child2
- child2 viene attaccato (posso vederlo), ma posso ancora usare gli elementi child1 dal codice che gestisce child1
codice child1 (che detiene i riferimenti a child1 DOM):
function testaccess(){
load_and_remove(child2);
var child1DOM = get_this_dom();
}
child1DOM è ancora lì e posso manipolarlo come se fosse ancora collegato al DOM.
Ok, suppongo che jQuery.remove() e il GC non saranno in grado di rilasciare memoria finché non avrò il codice che accederà ad esso, ma anche se non chiamo get_this_dom(), anche dopo essere usciti da testaccess(), Vedo che la memoria FF non diminuisce ...
Mi chiedo come far rilasciare a GC tutta la memoria, quando esco da child1.
un rapido sguardo a destra "correlate" domande link rivelato un caso simile -> http://stackoverflow.com/q/768621/104380 – vsync