PHP Performance Benchmarks & Optimierungstipps

Wahrscheinlichkeit und Komplexität

Die Laufzeit eines Programmes wird maßgeblich durch seine Komplexität, also dem Aufwand, beeinflusst.

Optimierung anhand der Wahrscheinlichkeit

<?php
$i 
0;
while(
$i 100000) {
    
$n rand(0,3);

    if(
$n == 0)
        
$i++;
    elseif(
$n == 1)
        
$i++;
    elseif(
$n == 2)
        
$i++;
    elseif(
$n == 3)
        
$i++;
    elseif(
$n == 4)
        
$i++;
    elseif(
$n == 5)
        
$i++;
    else
        
$i++;
}
?>

In diesem Beispiel haben wir (unsinnigerweise) den Zufallsgenerator auf Werte zwischen 0 und 3 eingestellt.

<?php
$i 
0;
while(
$i 100000) {
    
$n rand(0,3);

    if(
$n == 5)
        
$i++;
    elseif(
$n == 4)
        
$i++;
    elseif(
$n == 3)
        
$i++;
    elseif(
$n == 2)
        
$i++;
    elseif(
$n == 1)
        
$i++;
    elseif(
$n == 0)
        
$i++;
    else
        
$i++;
}
?>

Wir wissen und sehen, dass der zweite Fall der unwahrscheinlicher ist, da die ersten 2 Bedingungen niemals erreicht werden.
genau diese überspringen (überprüfen) kostet Zeit. Im ersten Fall ist die Reihenfolge andersrum, was eine bessere Ausnutzung der Wahrscheinlichkeit darstellt.

Variante Laufzeit Verhältnis
weniger Wahrscheinlich 20.596027 ms 100%
mehr Wahrscheinlich 22.666931 ms 110%



Optimierung anhand der Laufzeit

In diesem Beispiel werden in einer If-Bedingung zwei Funktionen oder-verknüpft überprüft.

<?php
if(langsamer() || schneller()) {
    return;
}
?>

Der Interpreter geht bei UND- und ODER-Verknüpfungen nach dem "LazyEnd"-Prnzip von links nach rechts vor, d.h. bei ODER (||) muss nur eine Bedingung "true" sein um in den Anweisungsteil zu springen, bei UND (&&) wird die ganze If-Bedingung nach einem "false" abgebrochen.

<?php
if(schneller() || langsamer()) {
    return;
}
?>

Die zweite Variante wird schneller ausgeführt, da hier die schnellere Funktion zuerst aufgerufen wird; die langsame Funktion wird garnicht erst aufgerufen, da die Bedingungen schon erfüllt sind.

Variante Laufzeit Verhältnis
schneller() 1.423836 ms 100%
langsamer() 13.938189 ms 979%
Grundlagen - Kontrollstrukturen - Schleifen - Arrays - Inkrement - Strings - Ausgabefunktionen - echo/print
Startseite   –   Impressum