Ich bin verwundert, warum das Gedächtnis meiner App in Firefox so viel schneller wächst als in anderen Browsern.
Grundsätzlich verwendet die App eine anständige Menge an AJAX, wobei die Basisaktion darin besteht, neue Posts zu laden, die einen durchschnittlichen HTML-Level haben und im Allgemeinen große Bilder haben. Die gesamte durchschnittliche Datenmenge pro Post (inkl. Geladene Bilder) liegt unter 1 MB, vielleicht 900k. Verwenden von jQuery 1.7.1.
In Chrome scheint der Speicher stabil zu sein, aber in Firefox führt jeder Post-Ladevorgang zu etwa 20 MB neuem Speicherverbrauch. Da viele Posts geladen werden, kommt man schnell auf über 1GB und sogar 1,4GB im Speicher, und die Dinge kommen schnell zum Stillstand.
Bei Firefox habe ich versucht, mit 'delete' Closures und alle anderen Variablen zu eliminieren. Keine große Verbesserung. Ich begann dann, die Funktionalität zu entfernen, und es schien, als würde ALLES einen Beitrag leisten.
Das Entfernen von QuickInfos, ein übermäßiges erneutes Laden von FB-Widgets (ein Kommentar-Widget pro Beitrag), machte eine große Verbesserung, bis auf 10 MB neuer Speicher pro Post.
Aber darüber hinaus kann ich nicht viel tiefer gehen! Grundsätzlich, wenn ich nur die neuen html + Bilder (wieder über 900k) über $ .post () laden, fügt jeder Beitrag ~ 8MB neuer Speicher hinzu, auch wenn die neuen Bilder "display: none" haben. (auch versucht, Firebug zu deaktivieren).
Dies ist mein erster Versuch der Speicherverwaltung, aber das scheint nur eine Menge Overhead zu sein, und merkwürdig, da ich denke, dass Speicher in Chrome überhaupt nicht so stark ansteigt. Scheint so, als ob ich Speichererhöhungen mehr im Einklang mit der Menge der geladenen Daten bekommen sollte, nicht 10X! (oder gar keine wie in Chrome wäre nett ...)
Ist das wirklich vernünftig? Irgendwelche Ideen, wo man nach Problemen suchen oder was ich tun kann, um dieses Problem weiter zu minimieren?
Danke!
Aktualisieren :
Wie Boris treffend bemerkte, ist der Speicherzuwachs fast ausschließlich auf Bilder zurückzuführen (mindestens 80%). Aber wieder ist die Speichererhöhung viel mehr (10x) die Größe der geladenen Bilder. Eine andere Sache, die ich gelernt habe über: Speicher - wenn ich einfach eine neue leere Registerkarte öffne, fällt der Speicher schnell und fast der gesamte addierte bildbezogene Speicher verschwindet. Ich nehme an, GC tritt ein und Boris vermutet, dass es wahrscheinlich ein GC-Problem ist.
Wenn das der Fall ist, wie kann ich untersuchen, warum es nicht nur in FF ausgelöst wird? Gibt es Möglichkeiten, es in JS auszulösen? Wie ich bereits erwähnt habe, habe ich versucht, Verschlüsse zu entfernen ...
Ein anderer Gedanke, könnte bindende Ereignisse (über jQuery) zu Bildelementen anstelle von divs schlecht sein? Ich dachte, jQuery würde sich mit all dem Zeug beschäftigen.
Ich habe gesehen, dass mein Gegner 2 GB RAM erreicht hat
Ich habe ein Widget in meinem Dock, das diesen Befehl auslöst, der in einer Datei gespeichert ist:
%Vor%Schneller Weg um FF zurückzusetzen und alle Tabs zurück zu bekommen. Müssen Sie das die meisten Tage machen :) Wenn es nicht Firebug gäbe, wäre ich jetzt in Chrome
Wenn Sie wirklich viel Ajax verwenden, können Sie versuchen, die $ .ajax () Option "cache" auf false zu setzen. Es müssten jedoch große Datenmengen sein, um den Speicher des Browsers zu beeinflussen.
Aus Gründen der Leistung möchten Sie normalerweise so viel wie möglich im Speicher bearbeiten und so oft wie möglich in das DOM schreiben.
Es könnte einfach sein, dass die Version von FF, die Sie verwenden, Speicher nicht zurückfordert, genauso wie andere Browser, mit denen Sie es vergleichen.
Es scheint mir nicht so, als wären Schließungen der Schuldige. Das scheint eher ein altes IE-Problem zu sein.
Wenn es wirklich ein Problem ist, können Sie versuchen, große Objekte explizit zu zerstören, wenn Sie wissen, dass sie nicht mehr benutzt werden.
nicht unbedingt eine Antwort, aber haben Sie diese Probleme mit der neuesten Version von Firefox (13)? Es gab eine Menge Probleme in Bezug auf Speicher und Leistung mit dieser Version und Mozilla haben gesagt, dass sie daran arbeiten, sie zu reparieren.
Auch wenn Sie beim Laden der Seite viele Objekte laden und diese nicht alle anzeigen, können Sie diese Bilder mit dem jquery Wegpunkt-Plugin dynamisch laden. Es würde eine Menge Gewicht, das der Browser beim Laden der Seite spürt, lindern.
Ich hoffe, dass das hilfreich war. Hier ist etwas Lesematerial, das Ihnen weiterhelfen kann:
Ссылка http://support.mozilla.org/en-US/kb/firefox-uses-too-much-memory-ram
und Ссылка