2008-10-04 6 views

Antwort

33

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.

+0

Ausgezeichneter Artikel zum Thema.+1 – AnthonyWJones

+0

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 –

3

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.

+0

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

22

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; 
Verwandte Themen