2008-09-18 6 views

Antwort

6

Sie sollten versuchen, die Javascript Memory Leak detector intern bei Microsoft entwickelt.

+0

Vielen Dank. Ich werde es versuchen –

+0

Nur auf der Website scheint scheint, das ist, was ich gesucht habe. Es scheint ein viel fähigerer Debugger zu sein als der, den ich bereits benutzt habe. –

+0

Aber es wird immer beim Entladen der Seite erkennen. Und IE7 stellt die Lecks beim Entladen wieder her ... wie checkst du IE 7 ein? – Sabya

1

Denken Sie daran, dass es bei Speicherlecks wirklich darum geht, dass Sie sich nicht selbst aufräumen. Alles was Sie brauchen ist eine kleine Organisation.

In der Vergangenheit habe ich mein eigenes Proxy-Objekt zum Anhängen von Ereignissen an DOM-Elemente erstellt. Es verwendet die API meiner Javascript-Bibliothek, um Ereignisse tatsächlich zu setzen und zu entfernen. Der Proxy selbst behält nur alle Referenzen im Auge, so dass ich eine Methode aufrufen kann, um alle möglichen Speicherlecks zu bereinigen.

Für meine Zwecke konnte ich nur einen einzigen Dekonstruktor auf der Seite aufrufen, der die Lecks für die gesamte Seite aufräumte, wenn der Benutzer die Seite verließ.

Sie müssen vielleicht granularer sein, aber die Technik ist die gleiche.

+0

ich GWT bin mit, die zur Vermeidung von Schließung bezogenen Speicherlecks ein benutzerdefiniertes Ereignissystem in Ereignishandlern. http://code.google.com/p/google-web-toolkit/wiki/DomEventsAndMemoryLeaks –

3

Nun ist es am besten zu verstehen, was sie verursacht, so dass Sie Ihren Code kritisch betrachten, Muster identifizieren können, die ein Leck verursachen können, und sie dann um sie herum vermeiden oder umgestalten.

Hier ein paar Links, die Sie erhalten begonnen, die beide sehr informativ:

+0

Danke Dan, Eigentlich habe ich schon darüber gelesen, einschließlich des zweiten Artikels, den Sie erwähnt haben. Ich benutze GWT mit sehr wenig JSNI so viele Speicherleckmuster werden automatisch von Karte genommen. Immer noch einige Lecks sehen, aber der Debugger zeigt nur die Elemente wie TABLE beteiligt in Leck. –