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
mehr Wahrscheinlich 20.245075 ms 100%
weniger Wahrscheinlich 21.978855 ms 109%



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() 2.190828 ms 100%
langsamer() 21.809101 ms 995%
Grundlagen - Kontrollstrukturen - Schleifen - Arrays - Inkrement - Strings - Ausgabefunktionen - echo/print
Startseite   –   Impressum