Wie kann ich Javascript Garbage Collection in IE erzwingen? IE verhält sich sehr langsam nach AJAX-Aufrufe und DOM-Manipulation

8

Ich habe eine Seite mit verketteten Drop-downs. Die Wahl von option aus dem ersten select bevölkert den zweiten und die Auswahl von option aus dem zweiten select gibt eine Tabelle mit übereinstimmenden Ergebnissen unter Verwendung der Funktion innerHtml auf einem leeren div auf der Seite zurück / p>

Das Problem ist, sobald ich meine Auswahl getroffen habe und eine beträchtliche Menge an Daten auf die Seite gebracht wurde, läuft das gesamte nachfolgende Javascript auf der Seite außergewöhnlich langsam ab. Es scheint so, als ob alle Daten, die ich über AJAX zurückgeholt habe, um div zu füllen, immer noch eine Menge Speicher beanspruchen. Ich habe versucht, das Rückgabeobjekt, das die AJAX-Ergebnisse enthält, nach dem Aufruf von null auf innerHtml zu setzen, aber ohne Glück.

Firefox, Safari, Chrome und Opera zeigen keine Leistungseinbußen, wenn ich Javascript verwende, um viele Daten in das DOM einzufügen, aber in IE ist es sehr offensichtlich. Um zu testen, dass es sich um ein Javascript / DOM-Problem und nicht um ein einfaches altes IE-Problem handelt, habe ich eine Version der Seite erstellt, die alle Ergebnisse beim ursprünglichen Laden zurückgibt, anstatt über AJAX / Javascript / p>

Zu Ihrer Information: Ich benutze die jQuery.get-Methode von jQuery, um den AJAX-Aufruf auszuführen.

BEARBEITEN Das mache ich:

%Vor%

Ich möchte darauf hinweisen, dass dies nur dann ein Problem darstellt, wenn die Rückgabe data ziemlich groß ist. Es hängt direkt mit der Größe zusammen, da ich eine moderate Verlangsamung für mittelgroße Ergebnisse und nur eine starke Verlangsamung feststellen kann, wenn einige hundert Datensätze zurückgegeben werden.

    
aw crud 03.05.2010, 18:31
quelle

3 Antworten

7

Verwenden Sie

%Vor%

html() verwendet jQuerys empty -Methode, die sehr hart arbeitet, um Speicherlecks zu verhindern.

hast du es versucht:

%Vor%

Ich denke, es gibt andere Leistungsprobleme in Ihrem Code, die die Trägheit verursachen. Sind Ihre Rückgabedaten mit PNGs mit Alpha-Transparenz? Ich habe gesehen, dass IE6 zu töten (wenn der Alpha-Filter angewendet wird) und IE7 erheblich verlangsamen.

    
David Murdoch 03.05.2010, 18:43
quelle
14

Sie können die Garbage Collection im Internet Explorer mithilfe der Funktion CollectGarbage erzwingen, z. B.

%Vor%

Der JScript-Garbage-Collector wird ausführlich in diesem Blogeintrag beschrieben: Ссылка

Wie der Blog sagt, ist der GC nicht vorhersehbar, also Daten löschen oder data = null wird nicht den Speicher sofort zurückfordern, aber es wird es schließlich zurückfordern.

Aber ich bezweifle, dass Ihre Leistungseinbuße tatsächlich durch die Speichernutzung verursacht wird; Ich denke, dass es ein Problem mit dem DOM-Rendering ist.

    
ignaZ 21.05.2010 14:10
quelle
3

Wenn jemand nicht nur an IE interessiert ist:

Um die Müllsammlung in Gecko zu erzwingen:

%Vor%

Link

    
Max 11.05.2012 12:23
quelle