Wissen Sie, was Speicherlecks in JavaScript verursachen kann? Ich interessiere mich für Browser: IE 7, FireFox 3, Safari 3Wissen Sie, was Speicherverluste in JavaScript verursachen kann?
Antwort
Es gibt einen schönen Artikel über JavaScript and memory leaks. Es ist nicht spezifisch für Browser, es beschreibt vielmehr die ganze Problematik von Speicherlecks und JavaScript.
Ich denke, es ist ein besserer Ansatz ist als Browser unspezifisch wie möglich insted der Optimierung für einige Browser zu sein, wenn eine Entwicklungs Website für die Öffentlichkeit.
Im Allgemeinen; Zirkuläre Referenzen sind die Ursache vieler Probleme. Ich erinnere mich IE 6 (nicht sicher, ob es für 7 gilt) mit XMLHTTP ziemlich schlecht leaking ... Einstellung onreadystatechange = null, sobald es fertig mit es behoben wurde.
Ja das Problem bezieht sich auf 7. Und Sie können nicht null zuweisen, da es nicht eine Funktion Sie eine Lücke Funktion Funktion benötigen() {}, das war erstellt im globalen Gültigkeitsbereich und/oder weist der Variablen, die einen Verweis auf das xmlhttp-Objekt enthält, null zu. – AnthonyWJones
Dies ist ein klassischer Speicherverlust in 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
}
}
Nachdem dieser Code dort Kreis Referenz ausgeführt wird, weil ein Element, eine Funktion seines OnClick Ereignis zugeordnet hat, die einen Bereich Objekt referenziert, die ihrerseits eine hält Verweis auf Element.
someElement-> onclick-> function-Scope-> elem-> someElement
In IE DOM-Elemente sind COM-basierte Referenzzählung Objekte, die die Javascript GC kann nicht Bereinigung.
Die Zugabe einer letzten Zeile in dem obigen Code würde es aufzuräumen: -
var elem = null;
Sie können überprüfen, this MSDN-Artikel für den Internet Explorer Muster Speicherleck. Auch gibt es einige Tools zur Erkennung von Speicherlecks:
Sie sind mit zwei Arten von Objekten (und 2 Müllsammler) zu tun, JavaScript und DOM Objekte, die sich gegenseitig referenzieren können (die zirkuläre Referenz), und dann kann sich kein GC selbst um alle seine Objekte kümmern, wenn die Seite entladen wird. Hier ist eine gute Beschreibung:
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. Verweise auf statische Eigenschaften verursachen Speicherverluste
- 2. Was kann java.lang.NoClassDefFoundError verursachen?
- 3. Was kann EXC_BAD_INSTRUCTION in dyddbootstrap verursachen?
- 4. Adobe AIR, Speicherverluste
- 5. Finden Sie Speicherverluste durch Smartpointer
- 6. Kann das Label "javascript:" irgendwelche Probleme verursachen?
- 7. Was kann den Fehler "doppelte Fehlerliste" verursachen?
- 8. Was kann eine deaktivierte Git-Taste in VSCode verursachen?
- 9. Wie verstecken Sie erwartete Speicherverluste in FastMM?
- 10. Speicherverluste in den Geräten
- 11. Speicherverluste in Boost Asio
- 12. Kann eine Website wissen, ob Sie ihre Javascript-Variablen bearbeiten?
- 13. Speicherverluste in Golang
- 14. Was könnte Probleme bei der Einstellung von JavaScript-Cookies verursachen?
- 15. Wie erkennen Sie Speicherverluste auf dem iPhone?
- 16. Wie kann ich wissen, was osCommerce veröffentlicht?
- 17. Wie kann man wissen, was rückrolliert wird?
- 18. Was kann den Fehler "Assertionsfehler in - [UICollectionViewData numberOfItemsBeforeSection:]" verursachen?
- 19. So finden Sie Speicherverluste mit Clang
- 20. Wie kann man wissen, was 'errno' bedeutet?
- 21. Was würde diesen Fehler in Expressjs verursachen?
- 22. Was wissen Sie über Avaloq-Skripte?
- 23. Wie JavaScript Callbacks wissen, was sind ihre Parameter?
- 24. Was ThreadAbortException verursachen kann, wenn ich HttpWebRequest.GetResponse() verwende
- 25. was könnte einen Druckfehler in Perl verursachen?
- 26. Code zu wissen, was?
- 27. FastMM meldet plötzlich Speicherverluste in Graphics32
- 28. Was muss ich wissen, um einen animierten Hover mit Javascript
- 29. Speicherverluste bei Verwendung von ALAssetsLibrary
- 30. Was kann Müll bei Ausdrucken mit Reportserver verursachen?
Ausgezeichneter Artikel zum Thema.+1 – AnthonyWJones
Und für alle, die an IE8 interessiert sein könnten, könnte es sich lohnen zu wissen, dass die meisten der in diesem Artikel erläuterten Beispiele keinen Speicher mehr in IE8 verlieren. Sollte dies gelesen werden: http://StackOverflow.com/Questions/1999840/javascript-circular-references-and-memory-leaks/2000467#2000467 –