Speicherlecks bei erneutem Laden der Seite diagnostizieren

8

Ich vermute, dass meine einseitige JavaScript-App irgendwo ein Speicherleck enthält. Schwache Geräte, auf denen Firefox oder Chrome läuft, stürzen möglicherweise ab, wenn die Seite geöffnet bleibt. Ich versuche zu ermitteln, ob das erneute Laden der Seite den Speicher freigeben würde oder nicht.

Ich verstehe, dass die Speicherverwaltung spezifisch für den Browser ist. Daher kann die Antwort in Chrome oder Firefox anders lauten.

HINWEIS: Ich erkenne, dass Browser in dieser Frage sehr viel erwähnt werden (was off Topic wäre), aber der Punkt dieser Frage betrifft Javascript Debugging, was meiner Meinung nach sehr am Thema ist.

    
emersonthis 22.01.2016, 17:28
quelle

2 Antworten

2

Barrieren Browser / Erweiterung Bug, Browser frei Ressourcen, wenn sie nicht mehr benötigt werden; Firefox löscht Abteilungen , Chrome tötet Prozesse und zugehöriger Speicher.

Firefox tut sein Bestes, aber es kann einige Zeit dauern, den Speicher zu löschen und Zombiefächer zu erstellen Anlass:

  

Compartments werden zerstört, wenn sie Müll gesammelt werden. Dies passiert einige Zeit nach dem letzten Hinweis auf sie verschwindet. Dies bedeutet, dass es eine Verzögerung zwischen dem Schließen einer Seite und dem Verschwinden ihrer Fächer geben kann ...

     

Manchmal werden aufgrund von Bugs in Firefox, dem Add-on-SDK und / oder Add-ons Abteilungen erstellt, die niemals zerstört werden. Dies ist eine besondere Art von Speicherleck, und sie verursachen, dass die Speicherbelegung von Firefox allmählich mit der Zeit zunimmt, sie verlangsamt und es wahrscheinlicher zum Absturz bringt.

Chrome verwendet einen Prozess pro Registerkarte (und wirklich Unterprozesse für einige Entitäten innerhalb einer Registerkarte sowie IIRC, z. B. Plugins, Iframes usw.) mit demselben Effekt. Obwohl eine schnelle Überprüfung gegen chrome://memory-redirect/ und das Aktualisieren eines Tabs gleich aussieht, wird pid verwendet. Eine Aktualisierung ist also keine völlig saubere Sache.

FWIW In Chrome gibt es ein "Erneut erzwingen", das den Cache löscht und möglicherweise zum Löschen mehr Speicherplatzes oder eines Placebos nützlich ist: cmd-shift-r

Ich bin nicht wirklich mit den Interna vertraut, aber ich habe nur Dinge gesehen, die nicht zuverlässig zwischen den Aktualisierungen frei werden, wenn ein bestimmter Browser wird zu clever und versucht, Dinge zu bewahren, wenn Sie die Herkunft nicht ändern, um die Ladegeschwindigkeit zu erhöhen.

Kurz gesagt, Sie könnten einen Browser-Bug auslösen, wenn Sie den Speicher nicht wie erwartet freigeben, aber Sie möchten die verschiedenen "about: memory" -Werkzeuge verwenden, um dies zu überprüfen und zu diesem Zeitpunkt auf Sie zu vermeiden Sie dieses Verhalten und / oder melden Sie das Problem an den Browser-Entwickler Team .

Ansonsten denke ich, dass es am besten ist, wenn Sie Ihre eigenen Speicherlecks innerhalb der Seite mit den verschiedenen verfügbaren Tools ansprechen.

    
mczepiel 22.01.2016 18:43
quelle
0

Eine gute Möglichkeit, die Ressourcenauslastung von JS zu debuggen, besteht darin, den Firefox-Leistungsmonitor innerhalb des Inspektionstools zu verwenden. Firefox Dev Edition verfügt über umfangreichere Tools

Drücken Sie auf der Seite F12 und klicken Sie auf das kleine Tachosymbol im Inspektionsfenster. Dies öffnet den Leistungsmonitor. Drücken Sie den "Start Recording" Knopf und Firefox wird beginnen, alle Timings, CSS Aktivitäten, Benutzereingaben etc. auf der Seite zu benchmarken.

Wenn Sie das Gefühl haben, dass es lange genug läuft, stoppen Sie die Aufnahme und Sie werden mit allen Daten konfrontiert. An der Spitze wird ein Diagramm angezeigt, das die Leistung anzeigt, und Sie können auf einen beliebigen Teil klicken und alle Skripte untersuchen, die zu diesem Zeitpunkt ausgeführt werden.

Ein vollständiges Tutorial zu den Performance-Tools finden Sie hier

    
Syd Lambert 22.01.2016 20:23
quelle