2010-01-26 4 views

Antwort

21

In Bezug auf Speicherverbrauch

Speicherlecks in JavaScript sind außer in der Regel ignoriert, wenn verwandeln sie sich in Browser Speicherlecks (das heißt, auch nachdem der Benutzer navigiert von der weg Seite, der Speicher wird weiterhin zugewiesen und es gibt keine Möglichkeit, es zu befreien). Der Grund dafür ist, dass Ihre Webanwendung zwar Speicherlecks aufweist, die Benutzer jedoch von einer Seite in eine andere wechseln, sodass die Lecks minimiert werden. Sie können den Browser jedoch möglicherweise nicht neu starten, so dass der Speicherverlust des Browsers schwerwiegende Folgen haben kann. Es ist bekannt, dass einige JavaScript-Codes in bestimmten Browsern Speicherlecks verursachen, wobei der Internet Explorer wahrscheinlich der schlechteste in diesem Bereich ist. Dafür finden Sie Microsoft JavaScript Memory Leak Detector als sehr nützlich.

In Bezug auf Zeiten

IE, Chrome und Safari haben in Profilern in den Web-Entwicklungs-Tool gebaut, die mit dem Browser versenden. Für Firefox können Sie Firebug verwenden.Auch nützlich kann sein, da Sie jQuery verwenden, was bedeutet, dass Ihr Profiling-Bericht mit anonymen Funktionen und ähnlichem gefüllt wird, was ihn ziemlich unlesbar macht, John Resig's jQuery profiling plugin, was Ihnen eine klarere Ausgabe in dieser Angelegenheit geben wird.

http://ejohn.org/blog/deep-tracing-of-internet-explorer/

+0

Vielen Dank, ich werde den Speicherlecksucher für IE versuchen. PS, der Link in Ajaxian funktioniert nicht mehr, hier ist der Arbeitslink: http://blogs.msdn.com/gpde/pages/javascript-memory-leak-detector_v2.aspx – Eli

+1

John Resigs Link zum Skript nicht mehr funktioniert. – drewish

+0

Die Annahme ist möglicherweise nicht immer gültig. Einige Seiten bleiben lange offen, zum Beispiel Google Mail oder Facebook, und JavaScript-Code mit Speicherlecks wird schnell angezeigt. – MauganRa

0

Firebug oder Page Speed ​​von Google für Firefox-Tools Profilierungs.

10

Verwenden Sie Firebug. Zitat aus http://getfirebug.com/js.html:

den Profiler zu verwenden, gehen Sie einfach auf die Registerkarte Konsole und klicken Sie auf die Schaltfläche „Profil“. Dann verwende deine App ein wenig oder lade die Seite neu und klicke dann erneut auf die Schaltfläche "Profil". Sie sehen dann einen detaillierten Bericht, der zeigt, welche Funktionen aufgerufen wurden und wie viel Zeit sie in Anspruch nahmen.

4

Ich würde vorschlagen, einen Blick auf die Profiler in Firebug nehmen, und das Drip Plugin für den Internet Explorer, um für Speicherlecks zu suchen.

Denken Sie auch daran, dass die meisten JavaScript-Speicherlecks von Zirkelverweisen zwischen DOM-Objekten und Javascript-Objekten stammen, die beim Entladen des DOM-Objekts nicht beschädigt werden. Um dies zu verhindern, würde ich vorschlagen, das Erstellen von Verweisen auf JavaScript-Objekte in DOM-Objekteigenschaften zu vermeiden (dh vermeiden Sie etwas wie document.getElementById('foo').bar = myObject;). Wenn Sie diese Zirkelverweise erstellen müssen, stellen Sie sicher, dass Sie sie selbst in einer Funktion unterbrechen, die beim Entladen der Seite oder beim Entfernen der DOM-Objekte vor dem Entladen ausgeführt wird.

1

Eine weitere einfache Möglichkeit, einen bestimmten Code zu testen, ist das Hinzufügen eines Timers.

var testStart = new Date(); 

// code to be tested here 

$('#jstest').html("selected function: "+ (new Date() - testStart) + " milliseconds"); 

Wo jstest ist ein span-Element irgendwo auf Ihrer Seite sichtbar.

2

Google Chrome hat auch Profiloptionen

1

Obwohl Chrom hat Profilierungsmöglichkeiten Inbuilt es keine genauen Informationen über die object.So nicht geben i bevorzugen:

+0

Sie sind ein wenig zu spät, um diese Frage zu beantworten, aber danke für den interessanten Link –