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 19.745827 ms 100%
mehr Wahrscheinlich 21.771908 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() 2.161026 ms 100%
langsamer() 20.706892 ms 958%
Grundlagen - Kontrollstrukturen - Schleifen - Arrays - Inkrement - Strings - Ausgabefunktionen - echo/print
Startseite   –   Impressum