Sie sind hier : sebastian1012.bplaced.net/ homepage-neu / kreuz-und-quer / tutorials-info-neuigkeiten-php / ausgabe-per-php-oder-html.php

Ausgabe per PHP oder HTML

Heute möchte ich mal wieder das beliebte Thema PHP-Ausgaben behandeln. Genauer gesagt: den Performance-Unterschied zwischen PHP- und HTML-Ausgaben. Man kann ja die gesamte Logik in PHP schreiben und außerhalb eines PHP-Blockes dann einfach per HTML die Ausgabe schreiben, doch ist das schneller als direkt von PHP die Ausgabe ausführen zu lassen?

Zur Verdeutlichung: Es geht um diese zu vergleichenden Snippets:

// PHP-Ausgabe <?php for($i=0;$i<1000;$i++) {   echo "Dies ist der ".$i.". Durchlauf: ";   if($i & 1) echo "ungerade";   else echo "gerade";   echo "<br />"; } ?>   // HTML-Ausgabe <?php for($i=0;$i<1000;$i++) { ?> Dies ist der <?php echo $i; ?>. Durchlauf: <?php   if($i & 1) { ?> ungerade   <?php   } else {   ?>   gerade   <?php   }   ?>   <br /> <?php } ?>

Was vermuten sie, welche Variante schneller ist? Mein erstes Gefühl ging eindeutig Richtung der zweiten Version, da dort die Ausgabestrings nicht geparst werden müssen. Um so erstaunter war ich, als folgendes Ergebnis herauskam (weil ich es zuerst nicht glauben wollte, habe ich den Test mehrmals durchgeführt).

Datei Gesamtlaufzeit durchschnittliche Laufzeit pro Durchlauf Verhältnis zur schnellsten Variante
ausgabe_phpecho.php 33.618340 s 3.362 ms
ausgabe_htmlecho.php 35.60414 s 3.506 ms 104 % (+ 4%)

Die Ausgabe per HTML ist demzufolge langsamer. Die Suche nach dem Grund dafür brachte mich ins Grübeln, denn wie gesagt muss der PHP-Interpreter in HTML-Strings nicht nach Variablennamen suchen, die er eventuell durch deren Werte ersetzen muss, was eigentlich ein Vorteil für die HTML-Variante darstellen sollte.
Ich bin dann auf die Idee gekommen, dass der Interpreter sich nach jedem PHP-Block „schlafen legt“ und danach wieder anlaufen muss. Allerdings kann ich mir das nicht so ganz vorstellen, da ja eigentlich die gesamte PHP-Datei bearbeitet wird. Trotzdem ist das die einzige Erklärung, die ich finden konnte. Am Output Buffering kann es auch nicht liegen, denn das würde ja nichts daran ändern, dass die PHP-Echo-Strings geparst werden müssten, was Zeit kostete.

Als Auswirkung überlege ich mir gerade, dass man auf größeren Projekten den HTML-Code komplett durch PHP ausgeben lässt. Im Moment betreibe ich es so, dass ich allgemeine Sachen, wie beispielsweise das <html>-Tag und größtenteils auch den gesamten HTML-Kopf (außer den für SEO-Zwecke wichtigen Tags wie <title>) in HTML geschrieben habe und von PHP nur große Teile des Bodys, wo es dann wirklich dynamisch zugeht, ausgeben hab lassen. Was meint ihr: In Zukunft wirklich ALLES als PHP-Echo? Bin gespannt auf eure Meinungen und eventuell weitere Ursachenforschung 😉

Abschließend noch die Quelltexte und die Benchmark-Ergebnisse.