Seitenteile includieren
Paul
- programmiertechnik
Moin.
Bin dabei meine statischen Seiten meiner Homepage in PHP's umzuschreiben.
Dabei möchte ich viele Teile auslagern und dann in den jeweiligen Seiten einbinden (z.B. viele der Metadaten im head oder das Gerüst der Seiten, da sie für alle Seiten gleich sind).
Nun die Frage: wäre es besser ich würde die einzelnen einzubindenen Teile in jeweils eine Datei schreiben und dann immer mit "include metadaten_head.php" einbinde oder wär'S vielleicht besser ich würde die Teile in einer einzigen include-Datei in Functionen schreiben und dann per z.B. metadaten_head() einbinden?
Danke,
Paul
Hello Paul,
Bin dabei meine statischen Seiten meiner Homepage in PHP's umzuschreiben.
Dabei möchte ich viele Teile auslagern und dann in den jeweiligen Seiten einbinden (z.B. viele der Metadaten im head oder das Gerüst der Seiten, da sie für alle Seiten gleich sind).
Nun die Frage: wäre es besser ich würde die einzelnen einzubindenen Teile in jeweils eine Datei schreiben und dann immer mit "include metadaten_head.php" einbinde oder wär'S vielleicht besser ich würde die Teile in einer einzigen include-Datei in Functionen schreiben und dann per z.B. metadaten_head() einbinden?
Ich nehme an, es geht Dir um die Anzahl der Dateiaufrufe?
Grundsätzlich ist 'include' für statische Inhalte nicht notwendig und daher auch nicht unbedingt zu empfehlen. Ein 'readfile()' wäre da z.B. besser eingesetzt.
http://de.php.net/manual/en/function.readfile.php
Große Webseiten gehen teilweise schon wieder einen anderen Weg. Inhalte, die sich nicht ändern, werden in einem gemeinsamen Seitengerüst zusammengefasst. Dies kann auch automatisch beim Erstaufruf geschehen. Anschließend wird das Ergebnis dann zwischengespeichert (cached). Es müssen also nur noch die variablen Inhalte dazugemischt (merged) werden.
Das spart bei vielen Requests dann richtig Kraft für den Host. Er muss das Dateisystem nicht so sehr quälen. Allerdings gibt es auch intelligente Dateisysteme, die ihreseits häufige Aufrufe zwischenspeichern. Das setzt dann wiederum viel Hauptspeicher voraus. Man dreht also immer weiter am Rad, je mehr man delegiert ...
Ich halte daher ein intelligentes Templatesystem für die beste Lösung. Das System muss das Gesamtkunstwerk aus überschaubaren Einzelteilen zusammenbauen können und dabei die statischen Teile zwischenspeichern, sodass sie beim nächsten Aufruf nicht neu geholt werden müssen.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Hi!
Große Webseiten gehen teilweise schon wieder einen anderen Weg. [...]
Ich halte daher ein intelligentes Templatesystem für die beste Lösung.
Man kann es auch für Overkill halten, falls es sich beim OP nur um eine Wald- und Wiesen-Website handelt. Jedes System, das irgendeine Erleichterung verspricht, muss das auf Kosten von irgendwas anderem machen, wenn das Ursprungssystem nicht völlig ineffizient gearbeitet hat. Den Geschwindigkeitsvorteil des intelligenten Templatesystems wirst du nicht mit der einerseits komplexeren Bedienung und den dabei möglichen Fehlbedienungen bekommen, es braucht auch noch Speicher für den Cache. Das Zusammenmischen könnte einen vergleichbar geringen Aufwand bedeuten wie das Zusammenfügen der ausgelagerten Teile beim OP, fällt also nicht ins Gewicht.
Wenn man mal die statische mit der Include-Lösung vergleicht, kommt aus Webserver-Sicht nur Aufwand für das Zusammenführen hinzu. Möglicherweise wird etwas Plattenplatz frei (wenn ganze Cluster oder Blöcke frei werden), aber das PHP-Paket, das vorher nicht benötigt wurde, frisst deutlich mehr weg, als frei wird. Diese "Nachteile" wird man aber gern in Kauf nehmen, denn die dabei benötigten Reserveren wird das System haben. Wichtiger ist hier der Vorteil der Arbeitsersparnis, wenn Seiten hinzukommen. Allerdings kann man auch eine weitere Lösung betrachten: Man verwendet ein System, das auf Editor-Ebene mit Templates arbeitet und dann statische Seiten erstellt. Dann hat man einen oder mehrere einmalige Schritte nach dem Editiervorgang und der Webserver kann weiterhin statische Dateien ausliefern. Solange keine Dinge wie Gästebuch oder Forum oder ähnliche Interaktivität hinzukommen soll, wäre das vermutlich der beste Kompromiss für beide Seiten.
Lo!
Danke Euch allen!
Mir kommt es dabei gar nicht so sehr auf Performance an da es sich nur um 0815 Seiten handelt.
Wichtig ist mir, dass ich etwas Arbeitserleichterung bekomme, wenn sich z.B. ein neuer MetaTag im head einschleichen soll.
Ich werd dann halt aus dem Bauch heraus entscheiden was ich mache, danke.
Na wenn es nur 08/15-Seiten sind, dann ist readfile() wohl der beste Kompromiss. Kann ich Dir empfehlen, mach ich auch gelegentlich mal ;-).
LG
Hi!
wäre es besser ich würde die einzelnen einzubindenen Teile in jeweils eine Datei schreiben und dann immer mit "include metadaten_head.php" einbinde oder wär'S vielleicht besser ich würde die Teile in einer einzigen include-Datei in Functionen schreiben und dann per z.B. metadaten_head() einbinden?
Für die Erreichung des Ziels ist beides geeignet. Man könnte noch entscheiden, ob include wirklich erforderlich ist, oder ob readfile() reicht. Den Rest musst du mit dir selbst klären, was für dich angenehmer ist. Die Performance brauchst du dabei (außer um Erfahrung zu sammeln) nicht zu betrachten, die Unterschiede werden - soweit überhaupt messbar - nicht relevant sein.
Lo!
(z.B. viele der Metadaten im head [...] da sie für alle Seiten gleich sind).
Du bist dir sicher, dass die Metadaten für sämtliche Seiten gleich sind?
Wenn ja: dann machst du etwa falsch.
[latex]Mae govannen![/latex]
(z.B. viele der Metadaten im head [...] da sie für alle Seiten gleich sind).
Du bist dir sicher, dass die Metadaten für sämtliche Seiten gleich sind?
Wenn ja: dann machst du etwa falsch.
"viele der" != "alle"
Cü,
Kai