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.38002 ms 100%
mehr Wahrscheinlich 28.551102 ms 140%



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.387119 ms 100%
langsamer() 13.870955 ms 1000%
Grundlagen - Kontrollstrukturen - Schleifen - Arrays - Inkrement - Strings - Ausgabefunktionen - echo/print
Startseite   –   Impressum