.| Autor | Beitrag |
|---|---|
|
000 05.06.2007, 18:06 Death-Angel |
Tach, ich hab da ein paar Frage zur HTML Seiten Generierung. Mhh mir ist keine bessere Beschreibung für das Problem eingefallen. Und zwar geht es darum welche Strategie besser ist, einen HTML Code an den Client (Webbrowser) zu übersenden, also von der Performance her. Es gibt folgende zwei Strategien bis jetzt zur Auswahl: 1.) Der HTML Code wird Stückchen für Stückchen an den Client per echo bzw. print übergeben, sobald ein Teil des HTML Codes fertig generiert ist (sequentiell gesehen). Das Problem ist dabei aber, dass der Aufwand sehr groß wird, was das Programmieren betrifft, wenn man in den Templates selbst solche placeholders hat an denen später etwas einsetzt wird. Wenn das Template einmal mit echo ausgegeben wurde, kann man ja im Nachhinein nichts mehr dazwischen friemeln. 2.) Der komplette HTML Code wird auf einem Rutsch über ein echo/print an den Client gesendet. Das hat um einiges geringeren Aufwand vom Programmieren her als die erste Strategie. Der Nachteil ist aber, dass der Browser erst zu arbeiten anfangen kann, wenn dieser echo/print ausgeführt wurde. Und falls man gerade einen genügend langsamen und genügend überlasteten Webserver hat, sitzt der Benutzer eine ganze weile vor einer leeren Seite. Zudem bin ich mir auch nicht sicher wie schnell ein Webbrowser eine HTML Seite interpretieren und darstellen kann, wenn es viele z.B. DIV's gibt die alle ausgerichtet werden müssen. Nicht dass der Browser dann irgendwann für eine größere Seite mit vielen DIV's schon mehr als eine Sekunde benötigt diese Seite zu interpretieren und darzustellen, falls er sie auf einen Rutsch bekommt. Natürlich dreht es sich hier nur um minimale Zeitunterschiede, aber diese werden halt umso größer wenn die Verbindung gerade sehr langsam ist. Vielleicht hat ja jemand von euch schon damit Erfahrung gemacht oder kennt sich mit dieser Materie aus und kann mir einen Tipp geben, welches die bessere Strategie im Verhältnis Aufwand/Nutzen ist. Dankö. --Mein Japan Tagebuch | Japan Gallerie |
|
Profil || Suche |
|
001 05.06.2007, 19:59 dp Administrator |
Ich wuerde den Client mal vernachlaessigen und die Serverseite betrachten. Wenn du erst alles zwischenspeicherst, muss entsprechend viel Speicher in einem Buffer bereitstehen und das erste Byte wird erst gesendet, sobald die komplette Ausfuehrung fast beendet ist. Angenommen die Serverseite ist nun sauber, hat der Client wiederrum die Möglichkeit zunächst Teile zu verarbeiten, zumindest schonmal den Syntaxbaum aufbauen oder sogar schon Teile rendern. Ob das nun in der Praxis signifikante Unterschiede macht gilt es zu benchmarken, rechnet man mit 50-100K pro Seite und 10-20 gleichzeitigen Requests, dann sind das vernachlaessigbare 2M Output-Buffer. Im Vergleich zu Apache selbst eher gering. Dafuer hat man die Freiheit zu jeder Zeit den Header modifizieren zu koennen, was oft durchaus sehr angenehm ist. -- |
|
Profil || Suche |
|
002 05.06.2007, 20:34 Death-Angel |
Danke für die schnelle Antwort. Ja stimmt, der Buffer ist ja auch noch ein wichtiger Aspekt. An so etwas hatte ich gar nicht gedacht. Dann bin ich mal gespannt was ich da auf die Beine stellen kann. --Mein Japan Tagebuch | Japan Gallerie |
|
Profil || Suche |
|
003 05.06.2007, 21:47 Megge |
Den output komprimieren? aus them thwboard: |
|
Profil || Suche |
|
004 06.06.2007, 13:04 oxff |
Setzen, 6 -- am Thema vorbei, Megge. --mwcollect - mein Projekt | oxlog - mein blog | happyhardcore.com Stream - gute Musik |
|
Profil || Suche |
|
005 06.06.2007, 19:13 Megge |
lol, ok :) -- |
|
Profil || Suche |
|
006 06.06.2007, 19:32 Death-Angel |
Mh ich fand den Beitrag hilfreich. Das hatte ich bis jetzt auch noch nicht gewusst, das soetwas möglich ist. --Mein Japan Tagebuch | Japan Gallerie |
|
Profil || Suche |
|
007 07.06.2007, 02:36 theDon |
Komprimieren ist nur dann sinnvoll, wenn du alle Ausgaben pufferst, und dann kannst du auch einfach den PHP-Puffer-Filter nutzen. --\o tanz den naziprau! o/ And more than ever, I hope to never fall, |
|
Profil || Suche |
|
008 23.06.2007, 19:58 default |
unerheblich ob du das erst bufferst und dann schreibst, oder zeilenweise echost, weil tcp das alles abfängt, http://de.wikipedia.org/wiki/Nagle-Algorithmus --Du musst Deine Bandbreite verbreitern, damit du breiter wirst von der Bandbreite her und ein breiteres Publikum ansprechen kannst. |
|
Profil || Suche |
|
009 23.06.2007, 23:44 K-Putt |
TCP fängt das nicht immer ab, wenn man den Buffer flusht kommt das in den meisten Fällen beim Client an, Garantie hat man dafür natürlich keine. Ich verwende das ganze selbst bei einem System, dass die Visits von > 10k Domains trackt, und anhand verschiedener Kriterien jeweils anderen Content ausliefert. Dabei muss einiges geloggt werden, und weil das seine Zeit dauert, liefere ich den generierten Content so schnell wie möglich per Flush aus, und logge danach. Der User bekommt dadurch den Inhalt zu sehen, und merkt nichts davon, dass das Skript am Server im Grunde noch ein paar ms weiterläuft. Sollte der Flush einmal nicht klappen, weil auf tieferen Schichten noch irgendwo gebuffert wird, ist das auch kein Beinbruch. Rambo Engineer @ Drippy's 2fort - finest TFC 1.5 || Bild Upload || The world's most advanced open source database |
|
Profil || Suche |
|
010 12.08.2007, 23:50 Chronial |
Erstmal haben TCP-Pakete gewöhnlich eine Größe von 1.5kib - liegen also gewöhnlich schon gut unter der Größe einer Website (und es wird nur bis zur Paketgröße in TCP gebuffert). Zum Thema: Zur komprimierung: "tsuji-giri" (japanisch) - ein neues Schwert an einem Passanten ausprobieren Dieser Beitrag wurde am 12.08.2007 um 23:52 von Chronial bearbeitet. |
|
Profil || Suche |

