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.
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.
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.
Tags und Links javascript internet-explorer jquery