HTML effektiv in PHP ausgeben
Es gibt mehrere Möglichkeiten HTML Code in PHP auszugeben.
Ich möchte in diesen Test die Möglichkeiten aufzeigen und auf die Performance eingehen.
Test #1: PHP und HTML Code druch <?php ?> trennen
Bei dieser Variante wird um das HTML Gerüst der PHP Code untergebraucht, wie es z.B. WordPress macht.
Hier der Quellcode
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | <?php //Datenfüllen for($i = 0; $i < 1000; $i++) { $out[$i]['titel'] = "Titel".$i; $out[$i]['text'] = "test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test ".$i; $out[$i]['user'] = "user".$i; $out[$i]['test'] = "test".$i; } //ob_start(); ?> <?php echo "Hallo"; ?> <table> <?php for($i = 0; $i < 1000; $i++) { ?> <tr> <td> <div><?php echo $out[$i]['titel']; ?></div> </td> <td> <div><?php echo $out[$i]['text']; ?></div> </td> <td> <div><?php echo $out[$i]['user']; ?></div> </td> <td> <div><?php echo $out[$i]['test']; ?></div> </td> </tr> <?php } ?> </table> <?php echo "Hallo"; /*ob_end_flush();*/ ?> |
Test #2: PHP und HTML Code durch <?php ?> trennen + ob_start()
Ist der gleiche Code wie in Test #1, nur dass die Ausgabe zuerst gepuffert und dann mit einem Rutsch alles ausgegeben wird.
Hier der Quellcode:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | <?php //Datenfüllen for($i = 0; $i < 1000; $i++) { $out[$i]['titel'] = "Titel".$i; $out[$i]['text'] = "test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test ".$i; $out[$i]['user'] = "user".$i; $out[$i]['test'] = "test".$i; } ob_start(); ?> <?php echo "Hallo"; ?> <table> <?php for($i = 0; $i < 1000; $i++) { ?> <tr> <td> <div><?php echo $out[$i]['titel']; ?></div> </td> <td> <div><?php echo $out[$i]['text']; ?></div> </td> <td> <div><?php echo $out[$i]['user']; ?></div> </td> <td> <div><?php echo $out[$i]['test']; ?></div> </td> </tr> <?php } ?> </table> <?php echo "Hallo"; ob_end_flush(); ?> |
Test #3: HTML Code mit heredoc ausgeben (echo <<<)
In diesem Test gebe ich den HTML Code mit Heredoc aus. Heredoc ist ab der PHP Version 4 verfügbar und ist eine weitere Möglichkeit schnell und einfach Strings in eine Variable zu speichern oder dies gleich mit echo auszugeben. Die heredoc Synatx in PHP lautet („<<<„).
Hier der Quellcode:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | <?php //Datenfüllen for($i = 0; $i < 1000; $i++) { $out[$i]['titel'] = "Titel".$i; $out[$i]['text'] = "test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test ".$i; $out[$i]['user'] = "user".$i; $out[$i]['test'] = "test".$i; } echo <<<EOT Hallo <table> EOT; for($i = 0; $i < 1000; $i++) { echo <<<EOT <tr> <td> <div>{$out[$i]['titel']}</div> </td> <td> <div>{$out[$i]['text']}</div> </td> <td> <div>{$out[$i]['user']}</div> </td> <td> <div>{$out[$i]['test']}</div> </td> </tr> EOT; } echo <<<EOT </table> Hallo EOT; |
Test #4: HTML Code in einer Variablen speichern
In diesem Test gebe ich den HTML Code nicht sofort aus, sondern speichere ihn in eine Variable.
Hier der Quellcode
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | <?php //Datenfüllen for($i = 0; $i < 1000; $i++) { $out[$i]['titel'] = "Titel".$i; $out[$i]['text'] = "test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test ".$i; $out[$i]['user'] = "user".$i; $out[$i]['test'] = "test".$i; } //ob_start(); $ausgabe = ''; $ausgabe .=''."Hallo".' <table>'; for($i = 0; $i < 1000; $i++) { $ausgabe .= ' <tr> <td> <div>'.$out[$i]['titel'].'</div> </td> <td> <div>'.$out[$i]['text'].'</div> </td> <td> <div>'.$out[$i]['user'].'</div> </td> <td> <div>'.$out[$i]['test'].'</div> </td> </tr> '; } $ausgabe .= ' </table> '."Hallo".''; echo $ausgabe; |
Benchmark
Test | Gesamtlaufzeit | Verhältnis zur schnellsten Variante |
---|---|---|
Test #3 | 97.876 s | 100% |
Test #1 | 102.757 s | 105% (+5%) |
Test #4 | 119.391 s | 122% (+22%) |
Test #2 | 120.158 s | 123% (+23%) |
10.000 Durchläufe mit den Apache Benchmarktool ab
Wie man gut sehen kann ist die Variante mit heredoc die mit Abstand schnellste. Dies finde ich sehr interessant und heredoc findet sich bestimmt bald in meinen Projekten wieder. In einem Templatesystem macht sich dieser Geschwindigkeitsvorteil bestimmt bemerkbar. Ich werde es mal testen und euch berichten.
Schlagwörter: Benchmark, heredoc, HTML, Performance, PHP
Remo sagt
am 19. August 2012 @ 00:18
Interessanter Vergleich! 🙂
info Taruhan Bola sagt
am 26. Dezember 2017 @ 20:45
excellent publish, very informative. I’m wondering why the other specialists of this
sector do not realize this. You should continue
your writing. I’m sure, you’ve a huge readers‘ base already!