Ich verstehe, dass das Rendern einer so großen Tabelle die Grenzen jedes Browsers sprengt. Allerdings war ich neugierig, warum eine Tabelle, die sehr groß ist (mehr als 20.000 Zeilen), Firefox stürzt, während alle anderen Browser es relativ schnell rendern.
Ich benutze ASP.NET und schreibe die Tabelle html direkt in den Puffer mit Response.Write. Ich dachte zuerst, dass ich vielleicht etwas falsches HTML erzeugte, also entschied ich mich, die Tabelle mit einem Gridview neu zu erstellen. Dies führte zu einer weiteren Verlangsamung von Firefox, hatte aber in anderen gängigen Browsern nur eine etwas langsamere Renderzeit.
Firefox erstellt die ersten (ungefähr) 10.000 Zeilen ganz gut. Das Problem besteht darin, dass es die restlichen Zeilen sehr langsam hinzufügt, bis die Anwendung nicht mehr reagiert, während eine zunehmende Speichermenge (300 MB +) verwendet wird. Internet Explorer verwendet nur ca. 30 MB.
Ich verwende die aktuellste Version von Firefox und alle meine Add-ons sind beim Testen deaktiviert. Außerdem habe ich alle CSS und Javascript von der Seite entfernt.
Ist das ein bekanntes Problem mit Firefox? Hat jemand anderes das erlebt? Welche Schritte können unternommen werden, um das Problem zu beheben oder zumindest mit der Fehlerbehebung zu beginnen?
BEARBEITEN Ich weiß, dass so viele Tabellenzeilen auf einer Seite eine schreckliche UI-Designpraxis sind. Danke für alle, die darauf hingewiesen haben, aber das war nicht meine Frage. Zur weiteren Klärung war ich nur neugierig, warum dies in allen Browsern außer Firefox funktioniert.
Versuchen Sie, die Tabelle mit einer festen Breite zu definieren
%Vor%Dadurch kann der Browser die Tabelle rendern, ohne dass er versucht, die Breite bei jeder neuen Zeilenhinzufügung neu zu berechnen.
[AKTUALISIEREN]
Ich bin mir nicht sicher, wie Ihre Daten aussehen, aber ich kann
%Vor%in Firefox 3.0.11. Obwohl es eine Weile dauert, wird firefox es anzeigen. Es verbraucht 239 MB RAM. RandomString () gibt nur eine Zeichenfolge zwischen 0 - 22 Zeichen zurück.
Sie könnten Paginierung verwenden, um das herauszufinden :) Ich stelle mir vor, dass mein armer alter Laptop sterben würde, wenn Firefox versuchen würde, 20k Zeilen von Tabellen zu rendern. Und es ist ein Core2 mit 4GB RAM: P
Liegt es möglicherweise an Ihren Daten? Ich habe gerade eine einfache ASP.NET-Seite hochgepeitscht, die eine 50k-Zeilentabelle erstellt und Firefox macht es einfach gut.
%Vor%BEARBEITEN: Nach dem, was Sie in Ihren Kommentaren gezeigt haben, würde ich vorschlagen, dass das Problem eher bei Ihren Daten als bei der Tabelle liegt. Sie müssen einige Tests mit verschiedenen Daten, Elementen und Layouttechniken durchführen, um festzustellen, wo das Problem liegt. Ich suche besonders nach:
</td>, </tr> and </table>
hmmm .. scheint ein Hinweis darauf zu sein, dass Sie kein gültiges html verwenden (nicht schließende Zeilen oder so). Führen Sie eine Teilmenge Ihrer Tabelle über einen Validator aus.
table-layout: behoben (nach Jacks Antwort) sollte bis zum Absturz nach oben gerendert werden. Es scheint, als wüsste es vorher nichts über den Tisch (wie seine Breite). Versuchen Sie, die Breite auf einen Pixelwert zu setzen und verwenden Sie col-Elemente.
%Vor%Ich würde vorschlagen, die Paginierung für einen Datensatz dieser Größe zu verwenden. ExtJS hat ein sehr nettes GridPanel, das einfach zu implementieren ist (Sie können den Quellcode der Beispiele zur Orientierung betrachten), und wenn Sie will etwas nicht so "extrem" (wie es ändert nicht das Aussehen und Gefühl der Tabelle), jQuery hat einige AJAX Paginierung auch.
Ein anderer Gedanke
Wie lange dauert das Senden der Informationen? Ist es auf der Serverseite gepuffert? Könnte mit der Verbindungsbehandlung von Firefox zusammenhängen, anstatt mit zu rendern.
Ich denke, ein großer Teil des Problems besteht darin, dass Firefox (zumindest frühere Versionen, die möglicherweise zu dem Zeitpunkt behoben wurden, zu dem diese Nachricht gelesen wird) dazu neigt, sehr viel Speicher zu verwenden, selbst wenn nichts passiert.
Das Laden einer großen Menge an Daten würde bedeuten, dass es noch mehr Speicher und CPU-Ressourcen benötigt als normalerweise, und es erfordert normalerweise eine ganze Menge vom System. Wenn also die Datenmenge enorm ist, könnte sie die gesamten Ressourcen nutzen und Firefox ist höflich genug, aufzugeben, anstatt den Computer zum Absturz zu bringen.
Ich würde vermuten, dass die Leistung variieren würde, wenn Sie dies auf einem sehr niedrigen System gegen ein High-End-System mit viel Speicher und schneller CPU versuchen.
Natürlich kommt es auch darauf an, was Sie mit Crash meinen. Die genaue Bedeutung von Absturz ist, dass es aufhört zu arbeiten und beendet wird, während man darüber reden könnte, einfach hängen zu bleiben (es hört auf zu arbeiten, aber hört nicht auf) in diesem Fall ist es möglich, dass es noch funktioniert, aber Mühe hat, die Seite vor dir zu rendern Verliere die Geduld.
Wenn Sie Firefox manuell schließen, bevor die Seite gerendert wird, zählt das technisch nicht als Absturz, nur als Hang oder der Benutzer war nicht geduldig genug, um auf das Laden der Seite zu warten (natürlich gibt es eine Grenze für jemandes Geduld!).
Ich habe das gleiche Problem. Grundsätzlich scrollt Firefox sehr langsam, wenn der Tisch angezeigt wird (30 Zeilen und etwa 50 Spalten). Sobald der Tisch nicht mehr sichtbar ist, scrollt der Browser wieder schnell. Also ich denke, es ist ein Display Rendering oder Update-Problem.
Tags und Links html asp.net html-table firefox