Benchmark: $i++ vs ++$i

25. Dezember 2007

Der erste im Titel genannte Befehl wird in PHP-Skripten sehr gerne eingesetzt: Er erhöht die Zählvariable $i um 1. Die zweite Anweisung macht genau das gleiche, also wieso miteinander vergleichen?

Im Web kursieren Geschichten, dass letzteres schneller sei als erstere. Zeit für einen Vergleich! Damit der Test auch aussagekräftig genug ist, wird der Befehl gleich 10.000.000 ausgeführt. Das bringt auch neuere PCs kurz zum Schwitzen. ;)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// IncrementBench.php
 
$rounds = 10000000;
 
$start1 = microtime(true);
for ($i = 0; $i < $rounds; $i++);
$end1 = microtime(true);
 
$start2 = microtime(true);
for ($i = 0; $i < $rounds; ++$i);
$end2 = microtime(true);
 
echo "\$i++: ".round($end1 - $start1, 5)."Sekunden\n";
echo "++\$i: ".round($end2 - $start2, 5)."Sekunden\n";

Ausgabe des Benchmarks:
michael@michfrm-home:~/Desktop$ php IncrementBench.php
$i++: 3.30877 Sekunden
++$i: 2.81894 Sekunden

Es gibt wirklich einen Unterschied, oft brauchen tut man ihn aber nicht:

1
2
3
4
5
6
7
// iTest.php
 
$i = 0;
echo $i++ . "\n";
 
$i = 0;
echo ++$i . "\n";

Ausgabe:
0
1

Bei $i++ wird zuerst der aktuelle Wert zutück gegeben und dann die Variable hoch gezählt. Bei ++$i zuerst hochgezählt und dann zurück gegeben.

Hier noch einen Tipp:

<BadBoy_> un –$i is schneller als ++$i
<BadBoy_> also wenn reihenfolge egal dann runterzählen, net hoch ;)

Nachgetestet:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// IncrementBench.php (-- Version)
 
$rounds = 10000000;
 
$start1 = microtime(true);
for ($i = $rounds; $i > 0; $i--);
$end1 = microtime(true);
 
$start2 = microtime(true);
for ($i = $rounds; $i > 0; --$i);
$end2 = microtime(true);
 
echo "\$i--: ".round($end1 - $start1, 5)."Sekunden\n";
echo "--\$i: ".round($end2 - $start2, 5)."Sekunden\n";

Ausgabe:

michael@michfrm-home:~/Desktop$ php IncrementBench.php
$i–: 3.07346 Sekunden
–$i: 2.62946 Sekunden

¬ geschrieben von Michael in PHP

« Frohe Weihnachten!

Wordpress Update überstanden » 

Ein Kommentar zu 'Benchmark: $i++ vs ++$i'

  1. BadBoy_ sagte am 26. Dezember 2007 um 15:17 Uhr:

    na wat sag ich ;)

Hinterlasse einen Kommentar

Theme von BenediktRB • Powered by Wordpress • Abonniere den RSS Feed