Home > PHP > Performanz von Schleifen

Performanz von Schleifen

Im Laufe meines Schaffens bin ich immer wieder mit Fragen der Performanz von Anwendungen konfrontiert worden. Ich möchte an dieser Stelle ein paar wenige Erkenntnisse zu Schleifen weitergeben.

Schleifen

// Fall 1
for ($i=0; $i

Welche ist am schnellsten?

Foreach ist signifikant schneller als alle anderen Schleifengebilde. Bei 100.000 Durchläufen ist sie fast doppelt so schnell wie die langsamste For-Variante.
Sie ist immer ein Drittel schneller als die WHILE-Schleife, welche sich auf Augenhöhe mit den schnellen FOR-Varianten befindet.
Wenn man auf die FOR-Schleife angewiesen ist, dann sollte man einen Aspekt beachten, der oft misachtet wird. Selbst in populären PHP-Frameworks wie ZEND tauchen diese Leistungsbremsen auf:

Die COUNT-Funktion darf niemals Teil des Test-Ausdrucks sein, weil sie dann jedesmal ausgeführt wird. Dies führt zur Leistungseinbuße. Die COUNT-FUNKTION sollte entweder als Initialisierungsausdruck oder übergebene Variable verwendet werden.
Also caseForF1 oder caseForF3, niemals caseForF2, verwenden!!!

Zur Erinnerung: for (Initialisierung; Test; Fortsetzung) Anweisung


Array
(
[caseFor1] =>
(
[0] => 0.04059
[1] => 0.03651
)
[caseFor2] =>
(
[0] => 0.4936
[1] => 0.49378
)
[caseFor3] =>
(
[0] => 0.04068
[1] => 0.03656
)

[caseForeach] =>
(
[0] => 0.02635
[1] => 0.0261
)

[caseWhile] =>
(
[0] => 0.03653
[1] => 0.03617
)

)

Test Code:

/**
 * case F1 => for without count
 * case F2 => for with count
 * case F3 => for rearranged
 * case E => foreach
 * case W => while
 */

$runs = range(0,1);

$results = array();

foreach($runs as $run) {

	$range = range(1,100000);

	// F1
	$start = microtime();
	$count = count($range);
	for($i=0;$i<$count;$i++){}
	$end = microtime();
	$results["caseF1"][] = ((int)(($end - $start)*100000)/100000);

	// F2
	$start = microtime();
	for($i=0;$i
			
Categories: PHP Tags:
  1. Bisher keine Kommentare
  1. Bisher keine Trackbacks