2010-04-09 10 views
5

Ich habe eine Tabelle mit häufig aktualisierten Informationen. Dies wird unter Verwendung eines Container-Div mit einem Div für jede Zeile dargestellt, wobei jede Zeile 10 Divs enthält.Welches ist die meisten Speicherleck sicheren Ansatz

Ich benutze setInterval, um einen asmx-Webservice aufzurufen, der einige json-formatierte Informationen zurückgibt.

Auf den Erfolg Rückruf rufen Sie $("#myContainer").empty(); auf dem Container div und erstellen Sie die Zeilen und 10 verschachtelte divs für jede Zeile Spalten.

Diese Seite kann für einen ganzen Tag laufen, so dass ich vorsichtig bin, das DOM so zu aktualisieren, wie ich bemerkt habe, dass Speicher für den Browser im Laufe der Zeit (IE8) steigt.

Der andere Ansatz, den ich in Betracht ziehe, besteht darin, eine ID zur Zeile div hinzuzufügen. Wenn neue Ergebnisse jedes Datenelement verarbeiten, suchen Sie nach der entsprechenden Zeile, falls vorhanden, überschreiben Sie die Daten in jedem div. Wenn es nicht existiert (z. B. neue Daten), hängen Sie die Zeile an.

Welche Ansätze haben andere für diese Art von langlebigen Pseudo-Echtzeit-Informationsanzeige verwendet.

TIA

Antwort

5

Im Allgemeinen ist eine sehr sichere Weise Speicherlecks zu verhindern, ist es zu unterlassen zerstört und neu zu erstellen, DOM-Elemente. In Situationen wie der Ihren versuche ich immer, die ursprüngliche DOM-Struktur beizubehalten, und aktualisiere einfach den inneren Text der Elemente, wenn neue Daten von AJAX-Anfragen verfügbar sind.

+0

Ist das eine erwiesene Tatsache? Hast du eine Referenz, nicht dass ich dich bezweifle, wäre es wirklich nett, darüber mehr zu lesen. – raveren

+2

@ Raveren: Nein, es ist keine bewiesene Tatsache. Tatsächlich ist es ein ziemlich pessimistischer Ansatz, da ich sicher bin, dass moderne Browser mehr als nur in der Lage sind, den Speicher beim Erstellen/Löschen von DOM-Elementen zu verwalten. Nichtsdestoweniger ist es so ein Kopfzerbrechen, Speicherlecks in langlebigen Webanwendungen zu finden (die mehrere Tage offen geblieben sind), dass ich immer versuche, an diesem pessimistischen Ansatz festzuhalten. Offensichtlich wäre dies für komplexe GMail-ähnliche Anwendungen nicht möglich. Aber es sieht so aus, als ob das OP einfach eine Datentabelle in Echtzeit aktualisiert, in welchem ​​Fall ich den Ansatz, den ich zuerst vorgeschlagen habe, versuchen würde. –

1

Aktualisieren Sie die Seite von Zeit zu Zeit.

Verwandte Themen