Problem mit _SEHR_ großen Tabelle
JCB
- html
0 Tom20 Orlando0 Thomas Schmieder0 Alexander Ganz
Tach ;)!
Ich hab n Problem :( - und ne Frage :/. Also, ich generiere mit ASP(.Net) fürs Intranet eine _sehr_ große Tabelle (ca. 37000 Zellen; Urlaubsplan für mehrere Mitarbeiter). Das Generieren geht relativ schnell, nur dann das Anzeigen im IE..... das _dauert_. Ok, 37000 Zellen zu rendern, dass kann auch schon mal dauern. Aber das dauert teilweise Minuten bis da was kommt. Kann man das irgendwie beschleunigen?? Öhm, nebenbei gesagt: der reine HTML-Code der Tabelle hat eine Größe von ca. 26MB :|. Aber ich denke mal ist liegt mehr an der Anzhal der Zellen.
Gruß, Jan.
Hallihallo
27000 Zellen sind 26MB? Das wären ja pro Zelle fast ein KB! Arbeitest du mit CSS, so dass da bei den Zellen nur noch <td>Zelleninhalt</td> steht? Wenn du da immer noch font-Tags reinbauen musst ist es verständlich, dass die Datei so gross wird.
Es könnte sein, dass 1. der IIS die Daten erst an den Browser sendet, wenn die ganzen 26MB generiert wurden und 2. könnte es sein, dass dein Browser die Tabelle erst 'hinmalt', wenn er die ganze Tabelle gelesen un verstanden hat. Falls 1. nicht stimmt könntest du die Riesen-Tabelle in mehrere kleine aufteilen.
Zudem kann man dein Skript ev. noch ein wenig optimieren. Vielleicht hilft es, wenn du die Schleife postest die die Tabelle generiert (wenn sie nicht zu lang ist).
MfG
Tom2
27000 Zellen sind 26MB? Das wären ja pro Zelle fast ein KB! Arbeitest du mit CSS, so dass da bei den Zellen nur noch <td>Zelleninhalt</td> steht? Wenn du da immer noch font-Tags reinbauen musst ist es verständlich, dass die Datei so gross wird.
Jo. ASP schreibt für jede Zelle dier gleiche CSS-Formatierung.
Zudem kann man dein Skript ev. noch ein wenig optimieren. Vielleicht hilft es, wenn du die Schleife postest die die Tabelle generiert (wenn sie nicht zu lang ist).
Öhm, das Script is denn doch wohl schon etwas länger derweil ich da nicht nur die Tabelle generiere.
Hi
27000 Zellen sind 26MB? Das wären ja pro Zelle fast ein KB! Arbeitest du mit CSS, so dass da bei den Zellen nur noch <td>Zelleninhalt</td> steht? Wenn du da immer noch font-Tags reinbauen musst ist es verständlich, dass die Datei so gross wird.
Jo. ASP schreibt für jede Zelle dier gleiche CSS-Formatierung.
Ehm... ich meinte eigentlich, ob ein td-Tag so
<td>Zelleninhalt</td>
oder eher so aussieht
<td style="font-family:Arial,sans-serif;font-weight:normal;...">Zelleninhalt</td>
Ich wollte damit fragen, ob du so wenig Text wie möglich benutztst, aber das wird wohl der Fall sein. Aber was macht denn die 26MB aus? Text kann das ja kaum sein, denn 26MB wird dir niemand lesen. Da muss doch etwas sein was die Datei so gross macht und was man ev. kleiner machen könnte. Kannst du uns vielleicht mal eine Zeile aus der Tabelle posten (kritische Infos kannst du ja abändern)?
Öhm, das Script is denn doch wohl schon etwas länger derweil ich da nicht nur die Tabelle generiere.
Es wird IMHO aber die Schleife sein (diejenige welche die Tabelle generiert), die die 26MB Daten generiert, oder?
MfG
Tom2, der Erste (mit der Nummer 2 ;-)
<td>Zelleninhalt</td>
oder eher so aussieht
<td style="font-family:Arial,sans-serif;font-weight:normal;...">Zelleninhalt</td>
zweiteres. wenn mir einer sagt wie ich in asp.net zentrale stylesheets einbinde wär ich dankbar :).
Ich wollte damit fragen, ob du so wenig Text wie möglich benutztst, aber das wird wohl der Fall sein. Aber was macht denn die 26MB aus? Text kann das ja kaum sein, denn 26MB wird dir niemand lesen. Da muss doch etwas sein was die Datei so gross macht und was man ev. kleiner machen könnte. Kannst du uns vielleicht mal eine Zeile aus der Tabelle posten (kritische Infos kannst du ja abändern)?
Ich hatte mich auch vertan. Es sind nich 26MB sondern 11MB. Und das auch nur durch die überflüssigen CSS-Angaben. Hab aber noch keine Lösung dafür (Unter ASP.Net) gefunden.
Es wird IMHO aber die Schleife sein (diejenige welche die Tabelle generiert), die die 26MB Daten generiert, oder?
Genau diese :). Bzw. an der Tabelle ansich mach ich gar nix. Ich generiere ein Dataset und schiebe dies in ein Datagrid.
Hi,
wenn mir einer sagt wie ich in asp.net zentrale stylesheets einbinde wär ich dankbar :).
<style type="text/css">
<!--
td { ...hier deine Definitionen für die Zellen... }
-->
</style>
im HEAD der Seite formatiert jede einzelne Zelle. Wie du ein paar Zeilen Quelltext mit ASP einfügst, wirst du ja wissen ;)
LG Orlando
Hi,
wenn mir einer sagt wie ich in asp.net zentrale stylesheets einbinde wär ich dankbar :).
<style type="text/css">
<!--
td { ...hier deine Definitionen für die Zellen... }
-->
</style>
im HEAD der Seite formatiert jede einzelne Zelle. Wie du ein paar Zeilen Quelltext mit ASP einfügst, wirst du ja wissen ;)
Öhm, vielleicht hatte ich mich missverständlich ausgedrückt bzw. nicht an alle Faktoren gedacht. Ich weiß schon wie man stylesheets einbindet. Nur das Problem ist, ich generiere nicht die Tabelle ansich, sondern ich generiere ein Dataset das ich in ein Datagrid schiebe. Und das Datagrid hat feste Formatvorgaben. Welche dann "blöderweise" bei jeder Zelle stehen.
Hi,
die Generator-Software muss ja von nem Idioten stammen *ggg*
Tom
die Generator-Software muss ja von nem Idioten stammen *ggg*
*räusper*
Hi,
die Generator-Software muss ja von nem Idioten
stammen *ggg*
*räusper*
die Formulierung mag Dir ja vielleicht nicht schmecken, aber ich hätte es nur unwesentlich höflicher ausdrücken können.
Der Generator ist Dein Problem - so, wie der CSS verwendet, macht man das einfach nicht. Also ändere es.
Daß eine Zerlegung der Tabelle in mehrere kleine Tabellen, welche Du relativ zu einander layouten kannst, ebenfalls hilfreich sein wird, wurde bereits ausgeführt.
Ach ja - versendest Du solche Datenmassen denn wenigstens in komprimierter Form? (Falls der IIS dazu in der Lage sein sollte ... bei dynamischen Daten ... hm ...)
Viele Grüße
Michael
Nochmal Tagchen Jan,
Arbeitest du mit CSS, so dass da bei den Zellen nur noch <td>Zelleninhalt</td> steht?
Es könnte sein, dass 1. der IIS die Daten erst an den Browser sendet, wenn die ganzen 26MB generiert wurden
dagegen hilft eben flush() an geeigneter Stelle
und 2. könnte es sein, dass dein Browser die Tabelle erst 'hinmalt', wenn er die ganze Tabelle gelesen un verstanden hat.
Der IE fängt an darzustellen, sowie er die erste darstellbare Sektion der Tabelle in die Finger bekommen hat. Der Netscape (4.7x) wartet, bis das </table> Tag durch ist.
Falls 1. nicht stimmt könntest du die Riesen-Tabelle in mehrere kleine aufteilen.
Das wäre doch ne super Lösung. Außerdem könnte man dann auch zwischendurch anhalten und auf den nächsten Teil einen weiter-Link setzen. Ggf. gibt Deiner Berechnung ja sogar ein Überspringen bis zum interessanten Datenwert her.
Habt Ihr eigentlich schon einen von den neuen internetfähigen Kloopapierdruckern? *g*
Liebe Grüße
Tom (der Andere)
Falls 1. nicht stimmt könntest du die Riesen-Tabelle in mehrere kleine aufteilen.
Das wäre doch ne super Lösung. Außerdem könnte man dann auch zwischendurch anhalten und auf den nächsten Teil einen weiter-Link setzen. Ggf. gibt Deiner Berechnung ja sogar ein Überspringen bis zum interessanten Datenwert her.
Habt Ihr eigentlich schon einen von den neuen internetfähigen Kloopapierdruckern? *g*
Ok, die Tabelle in mehrere kleine aufzuteilen wäre ne Lösung. Und Klopapierdrucker? Klar, hat ja wohl jeder dern Endlosdrucker hat. Einfach statt Endlospapier Endlos-Klo-Papier einspannen ;). Gedruckt wird die Tabelle allerdings nicht auf Endlospapier sondern auf DIN A0 ;).
Hi Jan,
Also, ich generiere mit ASP(.Net) fürs Intranet eine _sehr_ große Tabelle (ca. 37000 Zellen; Urlaubsplan für mehrere Mitarbeiter). Das Generieren geht relativ schnell, nur dann das Anzeigen im IE..... das _dauert_.
logisch, er muss wohl warten, bis er die ganze Tabelle geladen hat. Entweder du teilst die Daten in mehrere Tabellen auf, oder du fixierst deren Größe auf's Pixel genau, dann ist er auch etwas schneller, aber...
Öhm, nebenbei gesagt: der reine HTML-Code der Tabelle hat eine Größe von ca. 26MB
...diese Größe ist phänomenal - habt ihr so viel Urlaub? *g* Du solltest dir überlegen, ob es nicht klüger wäre, eine serverseitige Logik einzubauen, die Tabellenzellen zusammenfasst (colspan/rowspan), oder die Ausgabe auf mehrere Seiten aufzuteilen.
Oder du installierst einfach Opera >;)
LG Orlando
...diese Größe ist phänomenal - habt ihr so viel Urlaub? *g* Du solltest dir überlegen, ob es nicht klüger wäre, eine serverseitige Logik einzubauen, die Tabellenzellen zusammenfasst (colspan/rowspan), oder die Ausgabe auf mehrere Seiten aufzuteilen.
Oder du installierst einfach Opera >;)
Hi Orlando!
Hab mich mit der Größe vertan :). Sind nich 26MB, sondern 11MB. Naja, trotzdem noch recht viel. Die Größe liegt an CSS-Formatierungen. Colspan und Rowspan hatte ich eigentlich auch erst vor. Hab aber irgendwie nich so hinbekommen wie ichs wollte - bzw. gar nicht :/. Wollte dann auch nicht noch da großartig lange herumbasteln.
Aber was für eine serverseitige Logik meinst Du. Kann damit wenig anfangen.
Gruß, Jan
Hi Jan,
Hab mich mit der Größe vertan :). Sind nich 26MB, sondern 11MB.
das ist schon viel besser *g*
Naja, trotzdem noch recht viel. Die Größe liegt an CSS-Formatierungen.
Dann setzt du sie falsch ein. Lagere die Stylesheets in eine externe Datei aus und formatiere die Zellen dort mit
td { color:#000; ...usw. }
Dann musst du die Definitionen nicht in jede Zelle einzeln schreiben.
Colspan und Rowspan hatte ich eigentlich auch erst vor. Hab aber irgendwie nich so hinbekommen wie ichs wollte - bzw. gar nicht :/. Wollte dann auch nicht noch da großartig lange herumbasteln. Aber was für eine serverseitige Logik meinst Du. Kann damit wenig anfangen.
Ich meine eine Logik, die leere Zellen erkennt und zusammenfasst. Weißt du, was ich damit meine?
LG Orlando
Dann setzt du sie falsch ein. Lagere die Stylesheets in eine externe Datei aus und formatiere die Zellen dort mit
td { color:#000; ...usw. }
Dann musst du die Definitionen nicht in jede Zelle einzeln schreiben.
ok, das denke ich wäre machbar.
Ich meine eine Logik, die leere Zellen erkennt und zusammenfasst. Weißt du, was ich damit meine?
Ok, ich weiß was Du meinst. Nur, es gibt im Prinzip keine leeren Zellen, da jeder Tag eine eigene Zelle besitzt. Und auch weiterhin besitzen muss, um ihn anwählen zu können.
Tagchen Jan,
auf die Antworten der Anderen hier bi ich ja gespannt. Ich will mich also von der Diskussion über den Sinn und Unsinn solch großer HTML-Seiten fern halten.
Ich hätte da nämlich auch noch ein Beispiel für dich. Da kommt die Anzeige ganz schnell:
http://bitworks.de/test/endlos.php
Hier der unsinnige Quelltest:
<?
$block = "";
for($i=0; $i<=10000; $i++)
{
$block = $block."X ";
}
echo "einen Moment bitte, Daten werden geladen...<br>";
flush(); // hier wird der Buffer auf die Leitung geschüttet
while (true)
{
echo $block;
echo " sponsored by <a href="http://bitworks.de"><b>bitworks<sup>®</sup></b></a> ";
$anzahl=$anzahl+20030;
flush(); // hier wird der Buffer auf die Leitung geschüttet
}
?>
Grüße aus http://www.braunschweig.de
Hallo Jan,
Kann man das irgendwie beschleunigen??
Probiers mal im <table> mit style="table-layout:fixed".
Dann wird die Tabelle (jedenfalls im IE) auch schon während des Ladens angezeigt. Möglicherweise musst du noch feste Breitenangaben hinzufügen, wenn nicht gewünscht ist, dass alle Spalten gleich breit sind.
Viele Grüße
Alex