Wie kann ich erzwingen, Javascript garbage collection im IE? IE ist die Schauspielerei sehr langsam, nach der AJAX-Aufrufe & DOM-manipulation
Ich habe eine Seite mit gefesselt drop-downs. Die Wahl einer option
von der ersten select
füllt die zweite, und die Wahl einer option
aus der zweiten select
gibt eine Tabelle mit übereinstimmenden Ergebnisse mit der innerHtml
- Funktion auf eine leere div
auf der Seite.
Das problem ist, sobald ich meine Auswahl und eine beachtliche Menge an Daten gebracht, auf die Seite, und alle nachfolgenden Javascript-Code auf der Seite läuft außergewöhnlich langsam. Es scheint, als ob alle Daten, die ich zog wieder über AJAX zu füllen die div
ist immer noch in Beschlag, die viel Speicher. Ich habe versucht, die Rückgabe-Objekt, das enthält die AJAX-Ergebnisse zu null
nach dem Aufruf innerHtml
aber mit kein Glück.
Firefox, Safari, Chrome und Opera alle zeigen keine Leistungseinbußen, wenn ich Javascript zum einfügen einer Menge von Daten in den DOM, aber im IE ist es sehr offensichtlich. Um zu testen, ob es ein Javascript - /DOM-Frage eher als eine einfache alte IE-Problem, ich habe eine version der Seite, werden alle Ergebnisse auf der erste laden, anstatt über AJAX/Javascript und gefunden, der IE hatte keine Probleme mit der Leistung.
Zur info, ich verwende die jQuery-jQuery.get-Methode zur Ausführung der AJAX-call.
BEARBEITEN Dies ist, was ich Tue:
<script type="text/javascript">
function onFinalSelection() {
var searchParameter = jQuery("#second-select").val();
jQuery.get("pageReturningAjax.php",
{SEARCH_PARAMETER: searchParameter},
function(data) {
jQuery("#result-div").get(0).innerHtml = data;
//jQuery("#result-div").html(data); //Tried this, same problem
data = null;
},
"html");
}
</script>
Möchte ich bemerken, dass dies nur ein Problem wird, wenn die Rückkehr data
ist Recht groß. Es ist direkt mit der Größe, ich in der Lage bin, um zu sehen, moderate Verlangsamung für mittelgroße Ergebnisse und einzige große Verlangsamung, wenn es ein paar hundert Datensätze + zurückgegeben.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden
html()
nutzt die jQuery -empty
Methode, die sehr hart arbeitet, um Speicherverluste zu verhindern.haben Sie versucht:
Ich denke es gibt andere performance-Probleme in Ihrem code verursacht die Trägheit. Ist Ihr zurückgeben von Daten mithilfe von png ' s mit alpha-Transparenz? Ich habe gesehen, dass töten IE6 (wenn der alpha-filter ist) und verlangsamen IE7 erheblich.
Können Sie erzwingen, dass die garbage collection im IE mithilfe der CollectGarbage Funktion, z.B.
JScript garbage collector wird im detail beschrieben in diesem blog-Eintrag: http://blogs.msdn.com/ericlippert/archive/2003/09/17/53038.aspx
Wie der blog sagt, die GC ist nicht vorhersehbar, so Daten löschen oder data = null wird nicht wieder den Speicher sofort, aber irgendwann wird es zurückfordern.
Aber ich bezweifle, dass Ihre Leistung Strafe ist wirklich verursacht durch die Speichernutzung; ich denke, dass es ein problem mit DOM-rendering.
Wenn jemand interessiert sich nicht nur im IE:
Zwingen die garbage collection in Gecko:
Link