Mam łącza, które ładują strony do elementów iframe. Monitorowałem gromadzenie danych w pamięci za pomocą narzędzia do analizy pamięci w przeglądarce Google Chrome i zauważyłem pewne nieszczelności w pamięci.Elementy iframe i zarządzanie pamięcią w JavaScript
Załadowałem stronę i zrobiłem pierwszą migawkę, która dodała do 2.69 MB
. Kliknąłem link otwierający stronę na element iframe i wykonałem kolejną migawkę, co daje mi łącznie 14.58 MB
. Usunąłem iframe stosując następujący fragment: jquery
$('#myframe').unbind();
$('#myframe').remove();
/*
* By the way, I also tried $('#myframe > *') as a selector.
* It still didn't work. Even if it would, it doesn't look like a viable solution to me.
* It looks too resource intensive.
*
* I forgot to mention that I am not using Ajax to load my pages
*/
wziąłem kolejną migawkę i dostał 5.28 MB
które wskazywały na odchylenie 2.59 MB
od wartości początkowej, która według mojego rozumienia wskazuje wycieku pamięci.
Moje pytanie brzmi: czy po usunięciu elementu iframe (zawierającego załadowany dokument) czy moduł do zbierania śmieci nie uzna za konieczne usunięcia wszystkich obiektów zawartych w tym dokumencie z pamięci? Czy będę musiał to zrobić ręcznie?
Pomyślałem, że jeśli załaduję dokument do elementu iframe, jego rozmiar nie wpłynie na użycie pamięci na stronie nadrzędnej. Chociaż to będzie uważane za osobne okno, ale oczywiście nie było to dobre założenie z mojej strony.
Wszelkie sugestie, jak rozwiązać ten problem?
Dziękuję.
Ten wątek wydaje się być dobrym punktem wyjścia dla tego problemu: http://stackoverflow.com/questions/3785258/how-to -remove-dom-elements-without-memory-leaks. – bperson
Co dzieje się z pamięcią po wyładowaniu okna nadrzędnego? –
Dzięki. Jeśli odświeżę okno nadrzędne, pamięć wróci do "2,69 MB" – Sthe