Es gibt in PHP ja mehrere Schleifen. For, While, DoWhile und Foreach. Doch welche von diesen ist eigentlich am Perfomantesten wenn es darum geht einfach nur X Schleifendurchläufe zu erzeugen?
Zuerst einmal muss erwähnt werden, das alle Schleifentypen natürlich ihre Berechtigung haben. Davon unabhängig prüfen wir einfach mal, welche am schnellsten X ( in unserem Fall 10.000.000) Durchläufe abgewickelt hat.
| Server 1 | Server 2 | |
| For | 5,41 s | 2,92 s |
| While | 6,60 s | 1,61 s |
| Do While | 6,20 s | 1,51 |
| For Each | * | * |
Mittelwerte aus 5 Messungen; * = Test nicht möglich da nicht genug Speicher für ein Array mit 10000000 Elementen vorhanden war.
Wie man erkennt, kann man keine klare Aussage treffen welche Schleife am besten geeignet ist. Wie schon im vorherigen Test vom Post und Preinkrement scheint dies vom Server an sich abhängig zu sein.
Folgendes Script wurde verwendet:
<?php
define(“ROUNDS”, 10000000);
$i=0;$start1 = microtime(true);
for ($i=0; $i<ROUNDS; $i++);
$end1 = microtime(true);
$i=0;$start2 = microtime(true);
while ($i<ROUNDS) $i++;
$end2 = microtime(true);
$i=0;$start3 = microtime(true);
do {
$i++;
}while($i<ROUNDS);
$end3 = microtime(true);echo “for: “.round($end1 – $start1, 3).” Sekunden\n”;
echo “while: “.round($end2 – $start2, 3).” Sekunden\n”;
echo “dowhile: “.round($end3 – $start3, 3).” Sekunden\n”;
?>