2008-10-04 13 views

Odpowiedz

33

Istnieje ładny artykuł na temat JavaScript and memory leaks. Nie dotyczy to przeglądarki, raczej opisuje cały problem wycieków pamięci i JavaScript.

myślę, że lepszym rozwiązaniem będzie jak przeglądarce nieswoistym możliwie Insted optymalizacji dla kilku przeglądarek, przy opracowywaniu strona internetowa dla publiczności.

+0

Doskonały artykuł na ten temat.+1 – AnthonyWJones

+0

I dla każdego, kto może być zainteresowany IE8, może warto wiedzieć, że większość przykładów wyjaśnionych w artykule nie jest już przeciekiem w IE8. Powinien to przeczytać: http://stackoverflow.com/questions/1999840/javascript-circular-references-and-memory-leaks/2000467#2000467 –

3

Ogólnie; kołowe odniesienia są przyczyną wielu problemów. Pamiętam, że IE 6 (nie jestem pewien, czy dotyczy 7), niestety bardzo źle z XMLHTTP ... ustawienie onreadystatechange = null, gdy zostało zakończone i naprawione.

+0

Tak problem dotyczy 7. I nie można przypisać wartość null, ponieważ nie jest to funkcja trzeba funkcję void function() {}, która została utworzony w zasięgu globalnym i/lub przypisanie wartości null do zmiennej zawierającej odniesienie do obiektu xmlhttp. – AnthonyWJones

22

Oto klasyczny wyciek pamięci w 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 
    } 
} 

Po ten kod został prowadzony jest odwołanie cykliczne ponieważ element ma funkcja przypisana jego zdarzenie onclick, który odwołuje się do obiektu zakresu, który z kolei posiada odniesienie do elementu.

someElement-> onclick-> Funkcjonalnie scope-> elem-> someElement

W elementów IE DOM opierają COM zliczanie obiektów wzorcowych, że nie może JavaScript GC oczyszczania.

Dodanie końcowej linii w powyższym kodzie by go oczyścić: -

var elem = null; 
Powiązane problemy