Moin!
Ganz einfache Frage:
Was ist Serverlastiger? Ein PHP-"Haupt"-Script das per include() sagen wir mal 5-10 Seiteninhalte lädt oder stattdessen 5-10 HTML-Frames die den Inhalt "nachladen" (kleine PHP-"seiten")?
Ganz klar die Frames-Variante.
Ein Browser kann nur eine maximale Zahl an HTTP-Connections zum Server eröffnen. Über diese Connections müssen alle Elemente der aktuell zu ladenden Seite beschafft werden, d.h. es werden zwingend Dinge nacheinander geladen, nicht parallel. Deshalb ist es bei Seiten, die schnell sein wollen, eigentlich Standard bei der Optimierung, die Webseite aus möglichst wenig Elementen zusammenzusetzen:
- nur ein einziges, großes, gut komprimiertes Javascript
- nur ein einziges, großes, gut komprimiertes CSS
- nur ganz wenige einzelne Grafiken, stattdessen aber
- nur eine einzige große CSS-Sprite-Grafik, die als positioniertes Hintergrundbild jeweils nur einen winzigen Ausschnitt zeigt - eben genau denjenigen, der als Icon gerade benötigt wird.
Wenn du jetzt also anstelle der einen, mit PHP zusammengesetzten Seite ein Frameset lädst, dann bürdest du dem Client zusätzliche Ladevorgänge auf - und weil das zentrale Frameset erstmal nur HTML-Dateien lädt, werden Bilder etc. erst danach vom Server abgerufen.
Zusätzlich kommt noch die Problematik mit den Sessions ins Spiel: PHP sperrt die Datei, in der die Sessiondaten liegen, gegen wechselseitiges Überschreiben. Deshalb warten alle Skripte, die diese Datei durch den Befehl session_start() lesen wollen, so lange, bis das erste Skript, was den Zugriff erhalten hatte, beendet wird, oder durch session_write_close() den sessiondatenverändernden Part für erledigt erklärt. Die einzelnen HTML-Seiten des Framesets werden also nicht mal parallel geladen, sondern schön nacheinander. Wobei sie den Server eben auch deshalb belasten, weil für die Zeit, in der das passiert, jeweils ein Webserver-Prozess benutzt wird, der nichts tun kann, sondern abwartet. Du sperrst dir im Extremfall also freiwillig vier oder mehr Prozesse zur Auslieferung der HTML-Seite, wo du mit einem includierenden Skript nur einen einzigen benötigt hättest, der insgesamt vermutlich schneller wäre.
Zunächst war ich überzeugt, dass includes die bessere Lösung sind aus HTML/Design-Sicht (Weniger Darstellungsprobleme usw) doch jetzt vermute ich, dass durch die includes des "Hauptscripts" also index.php bei hoher Besucherzahl mehr belastet als einfache HTML-iframes, da das Script nicht "zur ruhe" kommt.
Wann immer du "vermutest" - gewinne Gewissheit, indem du nachmisst. Nur reale Messwerte geben dir Gewissheit, was aktuell "Sache" ist. Wobei zu beachten ist, dass diese Messwerte natürlich auch noch auf ganz andere Art optimiert werden können.
ist meine vermutung also richtig, dass iframes hier die bessere Lösung wären oder könnte man das sogar verallgemeinern, dass iframes in Bezug auf Serverlast immer die bessere Lösung sind!?
Nein. Im Allgemeinen ist deine Vermutung falsch.
- Sven Rautenberg