Das erste, was mir in Ihrer Frage auffällt, ist, dass Sie dies in IE sehen. Mein Team hat kürzlich das gleiche Problem (Extjs on IE) durchgespielt. Es stellt sich heraus, dass Ext nicht der Täter ist, sondern IE wahrscheinlich die Ursache ist.
Eine schnelle Google für "IE Schließung Speicherleck" finden Sie viele Erklärungen, aber der grundlegende Kern ist wie folgt:
IE verwendet zwei separate Engines, um das DOM und JavaScript zu verwalten. Wenn JavaScript einen Aufruf zum Erstellen eines DOM-Elements aufruft, greift die JavaScript-Engine zur anderen, um sie zu erstellen. Wenn Sie JavaScript an ein Ereignis in einem DOM-Element anhängen, wird ein Link von der DOM-Seite zurück zur JavaScript-Seite erstellt.
Das Problem liegt in der Tatsache, dass jede Engine ihre eigene Speicherbereinigung hat und nicht auf die andere Engine sehen kann. So sind kreisförmige Referenzen wirklich leicht zu finden, die große Mengen an Speicher sehr schnell essen können.
Ich denke, dass es ziemlich einfach ist, Speicherlecks zu erzeugen, wenn mit ExtJS für nicht erfahrene Programmierer programmiert wird. Dies ist kein ExtJS-Problem an sich. Es ist das Programmier-Paradigma ExtJS, das es Programmierern ermöglicht, solche Fehler leicht zu machen.
Aus meiner Erfahrung habe ich ein Speicherleck erstellt, als ich versucht habe, einen direkten AJAX-Chat mit ExtJS zu machen. Wenn einige Objekte ständig in AJAX-Callbacks (z. B. Datenspeicher, Rastermanipulationen) erstellt werden, werden diese Objekte nicht freigegeben und nicht zerstört. Es müssen spezielle und sehr clevere Techniken verwendet werden, um Speicherlecks mit ExtJS zu vermeiden, und dies betrifft nicht nur AJAX oder Callbacks.
Alles in allem ist ExtJS eine großartige Bibliothek, aber es muss sorgfältig verwendet werden.
Soweit ich weiß, habe ich in ExtJS noch nicht von nennenswerten Speicherlecks gehört. Obwohl ich sicher bin, dass es einige gibt, werden sie normalerweise ziemlich schnell behoben und die Community ist so groß, dass die meisten Bugs bekannt sind.
Stellen Sie sicher, dass Ihr Design auf einzelnen Komponenten basiert, die Sie hinzufügen und entfernen können, wenn sie nicht mehr benötigt werden. Eine ExtJS-Webseite wird meistens nur einmal geladen und das Mem wird mit den zusätzlichen Komponenten gefüllt . Sie können einige Mem mit Ext.destroy (this.el) freigeben, sobald Sie eine Komponente nicht mehr benötigen.
Stellen Sie außerdem sicher, dass Sie Firebug verwenden, um alle Komponenten oder Objekte ausfindig zu machen, die entfernt werden sollten.
Sieh dir diesen Thread in ihren Foren an , der viele Lecks in Ext 2.2, die von Waisen verursacht wurden, abdeckt Elemente. Es scheint, dass Ext 2.2.1 die meisten von ihnen repariert hat.
Das Problem ist immer noch offen, übrigens. ;)
Tags und Links javascript memory-leaks extjs