PHP Performance Benchmarks & Optimierungstipps

Berechnung oder Inkrementierung

Jeder kennt und braucht einfachste mathematische Funktionen, ob für Berechnungen, Schleifen oder Arraydurchläufe.
Hier werden wir die Unterschiede und das Verhalten von verschiedenen Iterationsmethoden analysieren.

Berechnung ($i = $i + 1)

<?php
$i 
0;
while(
$i 100000) {
    
$i $i 1;
}
?>

Der einfachste mathematische Ansatz, eine Simple Berechung: x = x + 1
Um Unterschiede deutlich zu machen schauen wir uns an, wie der PHP-Interpreter den Code stark vereinfacht in Maschinensprache übersetzt.
1. Lade x in ein Register
2. Lade x in die ALU
3. Lade 1 in die ALU
4. Addiere ALU
5. Speicher Ergebnis aus der ALU in einem Register

Dieser Vorgang brauch je nach Schritt mehrere Takte im Prozessor.

Inkrement: Post- oder Suffixinkrement ($i++)

<?php
$i 
0;
while(
$i 100000) {
    
$i++;
}
?>

Der meistverbreitete Lösungsansatz: Postincrement x++
Beim Postinkrement wird erst der aktuelle Wert zurückgegeben, dann inkrementiert. (WICHTIG für Funktionsaufrufe)
Folgend die Iteration in vereinfachter Maschinensprache:
1. Lade x in Register (Rückgabe)
2. Lade x in die ALU
3. Inkrementiere ALU
4. Speicher Ergebnis aus der ALU in einem Register

Inkrement: Pre- oder Präinkrement (++$i)

<?php
$i 
0;
while(
$i 100000) {
    ++
$i;
}
?>

Beim Preincrement wird der Wert gleich inkrementiert und dann zurückgegeben, dem entsprechend kürzer fällt der Maschinencode aus.
1. Lade x in die ALU
2. Inkrementiere ALU
3. Speicher Ergebnis aus der ALU in einem Register

Als Fazit lässt sich sagen, dass der Einsatz der Inkrementierungen vorallem bei Schleifen sinnvoll, wenn nicht sogar Pflicht, ist, man sollte jedoch auf den Unterschied zwischen Post- und Preincrement bei achten, da es sonst zu falschen Werten kommen kann.

Variante Laufzeit Verhältnis
Pre Increment ++$i 1.636028 ms 100%
Post Increment $i++ 2.171993 ms 133%
Berechnung $i + 1 4.64797 ms 284%
Grundlagen - Kontrollstrukturen - Schleifen - Arrays - Inkrement - Strings - Ausgabefunktionen - echo/print
Startseite   –   Impressum