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

Zeigen »

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:

Zeigen »

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:

Zeigen »

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

Zeigen »

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

TestGesamtlaufzeitVerhältnis zur schnellsten Variante
Test #397.876 s100%
Test #1102.757 s105% (+5%)
Test #4119.391 s122% (+22%)
Test #2120.158 s123% (+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: , , , ,

1 Kommentar bisher »

  1. Remo sagt

    am 19. August 2012 @ 00:18

    Interessanter Vergleich! 🙂

Komentar RSS · TrackBack URI

Hinterlasse einen Kommentar

Name: (erforderlich)

eMail: (erforderlich)

Website:

Kommentar: