Czy wiesz, co może powodować wycieki pamięci w JavaScript? Interesują mnie przeglądarki: IE 7, FireFox 3, Safari 3Czy wiesz, co może powodować wycieki pamięci w JavaScript?
Odpowiedz
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.
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.
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
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;
Można sprawdzić this MSDN artykuł do wzorców wycieków pamięci Internet Explorer. Ponadto istnieje kilka narzędzi do wykrywania wycieków pamięci:
masz do czynienia z 2 rodzajów obiektów (2 kolektorów i śmieci), JavaScript i DOM obiekty, które mogą odwoływać się do siebie nawzajem (odwołanie cykliczne), a następnie żaden GC nie może zająć się wszystkimi swoimi obiektami nawet po rozładowaniu strony. Oto dobry opis:
http://getben.com/archive/2006/05/30/Resolving-JavaScript-Memory-Leaks.aspx
http://www.josh-davis.org/2007/04/11/javascript-built-in-listeners-and-memory-leaks/
- 1. Android - czy programy mainThread mogą powodować wycieki pamięci?
- 2. Co może powodować java.lang.NoClassDefFoundError?
- 3. Czy etykieta "javascript:" może powodować problemy?
- 4. Wycieki pamięci Javascript: drzewo DOM jednoosobowe
- 5. Wycieki pamięci za pomocą UIWebView i Javascript
- 6. Wycieki w pamięci Pythona
- 7. Wycieki pamięci Node.js?
- 8. SoundPlayer powoduje wycieki pamięci?
- 9. Cykliczne dodawanie/usuwanie węzłów DOM powoduje wycieki pamięci w JavaScript?
- 10. Aktualizowanie DOM przez Javascript powodujące wycieki pamięci (tylko w Firefox?)
- 11. Wycieki pamięci w CFStreamCreatePairWithSocketToHost iOS
- 12. Urządzenie AngularJs testuje wycieki pamięci
- 13. Wycieki pamięci Pythona?
- 14. Jakiego rodzaju wycieki pamięci XCode Analyzer może nie zauważyć?
- 15. Czy "#pragma once" może potencjalnie powodować błędy?
- 16. Czy niska pamięć może powodować błędy skrępowania w natywnym kodzie?
- 17. My R ma wycieki pamięci?
- 18. W jaki sposób zamknięcia tworzą wycieki pamięci?
- 19. Czy używanie parametrów jądra może powodować konflikty bankowe?
- 20. Co zrobić, gdy "wycieki pamięci" są spowodowane przez strukturę Foundation?
- 21. Jak zidentyfikować wycieki pamięci w systemie Android?
- 22. Jak ukryć oczekiwane wycieki pamięci w FastMM?
- 23. Wycieki pamięci po użyciu typeinfo :: name()
- 24. Czy przechowywanie dużych zmiennych w zamknięciu może powodować problemy?
- 25. Interfejsy, metody anonimowe i wycieki pamięci
- 26. Jak znaleźć wycieki pamięci z Clang
- 27. LeakCanary spotykane wycieki pamięci Web Web View
- 28. Czy strona błędów strony JSP może powodować problemy?
- 29. Skąd wiesz, co to jest dobry indeks?
- 30. Wycieki pamięci przy użyciu macierzy podwójnej
Doskonały artykuł na ten temat.+1 – AnthonyWJones
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 –