ausgabe grosser tabellen mittels php/html/mysql
murraene
- html
Stehe hier vor einem Performance Problem.
Ich mussein MySQL Tabelle mit cca 15.000 Datensätzen im Browser ausgeben (nein das war nicht meine Idee). Das ist ja an sich nicht das Problem, nur zwingt das den Browser dramatisch in die Knie.
Habe schon verschiedene Varianten versucht:
1. direkte Ausgabe jedes einzelnen Tabellenelements
2. Ausgabe vollständiger Tabellenzeilen die zwischenzeitlich in einer Variablen gespeichert waren
3. Ausgabe der kompletten Tabelle in eine Datei - dann mit include
Alles unbefriedigend. Hat irgendwer eine wirklich schnelle Alternative? Vielleicht auch eine Alternative zu Tabellen?
Vielen Dank schon mal,
murraene
Hi!
Stehe hier vor einem Performance Problem.
Mhm! 15.000 Datensätze - wer will das in einem Dokument ansehen?
Ich mussein MySQL Tabelle mit cca 15.000 Datensätzen im Browser ausgeben (nein das war nicht meine Idee). Das ist ja an sich nicht das Problem, nur zwingt das den Browser dramatisch in die Knie.
Wie sieht denn ein Datensatz aus?
Habe schon verschiedene Varianten versucht:
- direkte Ausgabe jedes einzelnen Tabellenelements
Wie meinst Du das genau?
- Ausgabe vollständiger Tabellenzeilen die zwischenzeitlich in einer Variablen gespeichert waren
Warum zwischenspeichern?
- Ausgabe der kompletten Tabelle in eine Datei - dann mit include
Warum erst in eine Datei und dann per include diesen Inhalt holen?
off:PP
Ok, also ich möchte mir die Tabelle nicht ansehen, aber wer will das schon.
zu 1.
Ich gebe zuerst den header aus und dann innerhalb der while-schleife jedes <td>...</td> das sind dann eben 30 x 15000 echo "<td>".row[$i]."</td>"
Is mir schon klar, dass das ne weie dauert. Daher habe ich...
zu 2.
Jede komplette Zeile in $tmp gespeichert und dann insgesamt 15000 mal echo $tmp ausgegeben. War schon eine Ecke schneller.
zu 3.
Einfach um zu schauen ob es eine Variante gibt die wesentlich schneller ist als die anderen
Grüße,
AJAX wäre uU sinvoll - du gibst es in stückchen von zB 100 aus, und nimmst aus dem quelltext raus/fügst hinzu wärend gescrollt wird?
MFG
bleicher
Dazu fehlen mir leider völlig die AJAX Kenntnisse sorry.
Trotzdem Danke
Grüße,
Dazu fehlen mir leider völlig die AJAX Kenntnisse sorry.
Trotzdem Danke
hast das nötige an unter einem tag intus - willst es wagen?
MFG
bleicher
Hi!
AJAX wäre uU sinvoll - du gibst es in stückchen von zB 100 aus, und nimmst aus dem quelltext raus/fügst hinzu wärend gescrollt wird?
Also 149 *weitere* Http-Requests - findest Du das sinnvoll?
off:PP
Hi!
AJAX wäre uU sinvoll - du gibst es in stückchen von zB 100 aus, und nimmst aus dem quelltext raus/fügst hinzu wärend gescrollt wird?
Also 149 *weitere* Http-Requests - findest Du das sinnvoll?
off:PP
@PP
Warum gibt es Leute die auf Fragen oder Vorschläge immer mir Gegenfragen antworten und kein einziges sinnvolles zur Lösung beitragendes Wort schreiben
Hi!
@PP
Wenn Du mir direkt antwortest, kannst Du Dir diese 'Anrede' sparen.
Warum gibt es Leute die auf Fragen oder Vorschläge immer mir Gegenfragen antworten
Nicht nur Dir! Gegenfragen gehören zu diesem Forum, wie Ernie zu Bert - wenn es hier irgendwann keine Gegenfragen mehr geben sollte, dann bescheinige ich dem Forum den virtuellen, klinischen Tod!
und kein einziges sinnvolles zur Lösung beitragendes Wort schreiben
Auch Fragen enthalten sinnvolle Wörter - man erkennt sie vielleicht nicht gleich;)
off:PP
Grüße,
Also 149 *weitere* Http-Requests - findest Du das sinnvoll?
höchstens 3 - wer scrollt schon so weit runter?
MFG
bleicher
Hi!
Also 149 *weitere* Http-Requests - findest Du das sinnvoll?
höchstens 3 - wer scrollt schon so weit runter?
Die Anforderung des OP war(ist) aber, dass 15.000 Datensätze angezeigt werden sollen.
off:PP
Grüße,
Die Anforderung des OP war(ist) aber, dass 15.000 Datensätze angezeigt werden sollen.
können die auch auf die weise - der punkt ist - so müssen die nicht alle auf einmal angezeigt werden - und man kann die auch in 500stück sätzen behandeln - dann wäre da MAXIMAL (wer schaut schon 15 000 sätze-tabelle komplett durch?) 30 anfragen pro einmal komplett durchscrollen - gar nicht so viel, und der Nutzer bliebe verschont vor diashow-scrollen (nciht alle nutzen schnelle borwser)
MFG
bleicher
Hi bleicher!
Die Anforderung des OP war(ist) aber, dass 15.000 Datensätze angezeigt werden sollen.
können die auch auf die weise - der punkt ist - so müssen die nicht alle auf einmal angezeigt werden - und man kann die auch in 500stück sätzen behandeln - dann wäre da MAXIMAL
Das wissen wir aber nicht genau, denn die Anforderung wurde anders dargelegt.
(wer schaut schon 15 000 sätze-tabelle komplett durch?)
Das weiß ich nicht, aber so war die Aufgabe;)
30 anfragen pro einmal komplett durchscrollen - gar nicht so viel, und der Nutzer bliebe verschont vor diashow-scrollen (nciht alle nutzen schnelle borwser)
Ach! Das Problem ist an der Stelle nicht der UA - die Scriptlaufzeit alleine ist nicht ohne - die Zeit für das Rendering mag ja noch akzeptabel sein.
off:PP
Mahlzeit murraene,
Stehe hier vor einem Performance Problem.
Wessen Performance? Die der Datenbank? Die des Webservers (mit darauf laufendem PHP)? Die der Verbindung? Oder die des Browsers? Um welchen Browser in welcher Version geht es konkret?
Ich mussein MySQL Tabelle mit cca 15.000 Datensätzen im Browser ausgeben (nein das war nicht meine Idee).
Herzliches Beleid.
Das ist ja an sich nicht das Problem, nur zwingt das den Browser dramatisch in die Knie.
Aha, offenbar ein Browser-Performance-Problem.
- direkte Ausgabe jedes einzelnen Tabellenelements
Was verstehst Du darunter?
- Ausgabe vollständiger Tabellenzeilen die zwischenzeitlich in einer Variablen gespeichert waren
Was genau soll das bei einem offensichtlichen Client-seitigen Problem bringen?
- Ausgabe der kompletten Tabelle in eine Datei - dann mit include
Und worin unterscheidet sich aus Sicht des Clients das Eine vom Anderen?
Alles unbefriedigend.
Kein Wunder - du frickelst offenbar am Problem vorbei, da Dir die Ursache nicht klar ist.
Hat irgendwer eine wirklich schnelle Alternative? Vielleicht auch eine Alternative zu Tabellen?
Für tabellarische Daten sind Tabellen das richtige Mittel der Wahl.
Du könntest z.B. die Ausgabepufferung aktivieren und nach jeder einzelnen Tabellenzeile das Senden der zwischenzeitlich im Puffer aufgelaufenen Daten (also der jeweiligen Tabellenzeile) erzwingen.
So wird die Seite zwar nach und nach aufgebaut, aber man hat zumindest nicht das Gefühl, dass sich der Browser beim Rendern totläuft.
Wenn das Dein Problem nicht löst, solltest Du vielleicht darüber nachdenken, ob Du Dein Problem noch besser beschreiben könntest/solltest.
MfG,
EKKi
Hi!
Du könntest z.B. die Ausgabepufferung aktivieren und nach jeder einzelnen Tabellenzeile das Senden der zwischenzeitlich im Puffer aufgelaufenen Daten (also der jeweiligen Tabellenzeile) erzwingen.
Was genau willst du damit bezwecken? Es existiert bereits ein webserverinterner Ausgabepuffer. Wenn man den in Richtung Client leeren will, gibt es flush() (ohne ob_). Erst einen weiteren Puffer anzulegen, nur um ihn doch wieder stückweise zu leeren - darin kann ich keinen Sinn entdecken.
Lo!
Hallo,
Ich mussein MySQL Tabelle mit cca 15.000 Datensätzen im Browser ausgeben (nein das war nicht meine Idee). Das ist ja an sich nicht das Problem, nur zwingt das den Browser dramatisch in die Knie.
vermutlich ist das ganz einfach. SELFHTML: <http://de.selfhtml.org/html/tabellen/aufbau.htm#vordefinieren@title=Spalten vordefinieren>.
Freundliche Grüße
Vinzenz
Hi!
Hallo,
Ich mussein MySQL Tabelle mit cca 15.000 Datensätzen im Browser ausgeben (nein das war nicht meine Idee). Das ist ja an sich nicht das Problem, nur zwingt das den Browser dramatisch in die Knie.
vermutlich ist das ganz einfach. SELFHTML: <http://de.selfhtml.org/html/tabellen/aufbau.htm#vordefinieren@title=Spalten vordefinieren>.
Ja das ist bestimmt ein guter Hinweis, aber:
15.000 Zeilen à 30 Spalten dynamisch zu erzeugen benötigt schon etwas Zeit.
Ich habe mal getestet auf meinem lokalen System eine solche Tabelle per PHP generieren zu lassen - nur mit Dummy- Werten - ohne DB-Request.
Also 15.000 tr-Elemente, die jeweils 30 td-Elemente beinhalten und ja: colgroup habe ich auch verwendet.
Das PHP-Script lief 72 sekunden!
off:PP
Hallo PP,
Ich mussein MySQL Tabelle mit cca 15.000 Datensätzen im Browser ausgeben (nein das war nicht meine Idee). Das ist ja an sich nicht das Problem, nur zwingt das den Browser dramatisch in die Knie.
vermutlich ist das ganz einfach. SELFHTML: <http://de.selfhtml.org/html/tabellen/aufbau.htm#vordefinieren@title=Spalten vordefinieren>.
Ja das ist bestimmt ein guter Hinweis, aber:
15.000 Zeilen à 30 Spalten dynamisch zu erzeugen benötigt schon etwas Zeit.
Ich habe mal getestet auf meinem lokalen System eine solche Tabelle per PHP generieren zu lassen - nur mit Dummy- Werten - ohne DB-Request.
Also 15.000 tr-Elemente, die jeweils 30 td-Elemente beinhalten und ja: colgroup habe ich auch verwendet.
Das PHP-Script lief 72 sekunden!
sicher dauert es, aber wenn die Daten ganz normal an den Browser geschickt werden, kann dieser die Tabelle aufbauen und alles das, was an Zeilen bereits da ist, anzeigen. Dass man erst spät zu Zeile 15.000 springen kann, ist klar. Nur wird der Browser nicht lahmgelegt, weil er ständig rechnen muss, wie er die Tabelle zu rendern hätte.
Wie Du bereits schriebst: Ajax zu verwenden, nur um die Daten zu übertragen, macht das ganze noch viel schlimmer.
Wenn eine Person wider besseres Wissen und trotz Gegenargumenten unbedingt 15.000 Datensätze à 30 Spalten haben will, dann muss sie mit den entsprechenden Konsequenzen leben.
Freundliche Grüße
Vinzenz
Hi Vinzenz,
daran habe ich tatsaechlich auch schon gedacht, nur sind es teilweise Felder mit Kommentaren drin, die bloederweise sehr unterschiedlich lang sind. Ich werds mal versuchen, vllt zeigt es den gewuenschten Effekt.
Vielen dank!
Hallo,
daran habe ich tatsaechlich auch schon gedacht, nur sind es teilweise Felder mit Kommentaren drin, die bloederweise sehr unterschiedlich lang sind.
dann gibt es halt mehrere Zeilen Text für diese Kommentare :-)
Das lässt sich nicht nur besser rendern sondern auch besser lesen - wobei ich mir immer noch nicht vorstellen kann, wer sich eine 15.000-zeilige Tabelle antun will.
Freundliche Grüße
Vinzenz
Hi Vinzenz!
Ich mussein MySQL Tabelle mit cca 15.000 Datensätzen im Browser ausgeben (nein das war nicht meine Idee). Das ist ja an sich nicht das Problem, nur zwingt das den Browser dramatisch in die Knie.
vermutlich ist das ganz einfach. SELFHTML: <http://de.selfhtml.org/html/tabellen/aufbau.htm#vordefinieren@title=Spalten vordefinieren>.
Ja das ist bestimmt ein guter Hinweis, aber:
15.000 Zeilen à 30 Spalten dynamisch zu erzeugen benötigt schon etwas Zeit.Ich habe mal getestet auf meinem lokalen System eine solche Tabelle per PHP generieren zu lassen - nur mit Dummy- Werten - ohne DB-Request.
Also 15.000 tr-Elemente, die jeweils 30 td-Elemente beinhalten und ja: colgroup habe ich auch verwendet.
Das PHP-Script lief 72 sekunden!
sicher dauert es, aber wenn die Daten ganz normal an den Browser geschickt werden,
und ganz sicher dauert es unter Realbedingungen (Datenbank-Requests, HTTP-Kommunikation via Internet) signifikant länger, als mein Versuch hier mit dem lokalen Webserver.
kann dieser die Tabelle aufbauen und alles das, was an Zeilen bereits da ist, anzeigen. Dass man erst spät zu Zeile 15.000 springen kann, ist klar. Nur wird der Browser nicht lahmgelegt, weil er ständig rechnen muss, wie er die Tabelle zu rendern hätte.
Das stimmt natürlich: man _sieht_ recht schnell *ein Ergebnis*!
Wie Du bereits schriebst: Ajax zu verwenden, nur um die Daten zu übertragen, macht das ganze noch viel schlimmer.
Das denke ich schon, ja;)
Wenn eine Person wider besseres Wissen und trotz Gegenargumenten unbedingt 15.000 Datensätze à 30 Spalten haben will, dann muss sie mit den entsprechenden Konsequenzen leben.
Bei einer Ausgabe für Print - oder als Ausgabe in ein PDF-Dokument - mag das noch angehen, aber bevor der Server den kompletten Payload an den User Agent geschickt hat, ist dieser (zumal als Browser) wenig zu gebrauchen - da wir aber die genauen Vorgaben nicht kennen, belasse ich meine Ausführungen im Moment hierbei;)
off:PP
Grüße,
dass die meisten hoster die phpscriptzeit auf 30sec beschränken ist dir bekannt?
MFG
bleicher
Hallo,
dass die meisten hoster die phpscriptzeit auf 30sec beschränken ist dir bekannt?
der OP wies nicht darauf hin, dass er ein Problem mit der Laufzeit habe. Ich gehe durchaus davon aus, dass kein 08/15-Shared-Hosting-Paket im Spiel ist.
Freundliche Grüße
Vinzenz