Geschwindigkeit von PHP optimieren

 

Für die beste Performance in der PHP Entwicklung

Manche Programmierer wollen bezüglich Geschwindigkeit, manchmal das meiste raus holen. Dazu gibt es hier mal eine Übersicht für PHP 7, inklusive Benchmark Test. Für noch mehr Performance in der PHP Entwicklung.

Zum Performance Test: Was ist schneller

Zur besseren Übersicht einzelner Benchmarks. Folgender Programmcode wurde miteinander verglichen:

  1. Für die beste Performance in der PHP Entwicklung
  2. Zum Performance Test: Was ist schneller
  3. Strings
  4. Echo mit doppelten oder einfachen Anführungszeichen
  5. Echo mit einer Liste von Argumenten oder einzelnes Argument
  6. strtr() oder str_replace()
  7. Integer
  8. Eine Zahl mit intval() oder (int) konvertieren
  9. Additionsverfahren oder Postinkrement
  10. Postinkrement oder Präinkrement
  11. Arrays
  12. array_push() oder die $array[] Methode
  13. Fakten zum PHP Geschwindigkeitstest
  14. Fazit

Strings

Echo mit doppelten oder einfachen Anführungszeichen

<?php
// doppelte Anführungszeichen
echo "string";

// einfache Anführungszeichen
echo 'string';
?>

A doppelte Anführungszeichen Ø 59,2 ns
B einfache Anführungszeichen Ø 52,4 ns

Echo mit einfachen Anführungszeichen ist schneller als echo mit doppelten Anführungszeichen.

Echo mit einer Liste von Argumenten oder einzelnes Argument

<?php
// Liste von Argumenten
$variable "Wert";
echo 
$variable$variable$variable$variable$variable$variable$variable$variable$variable$variable;

// Einzelnes Argument
$variable "Wert";
echo 
$variable;
echo 
$variable;
echo 
$variable;
echo 
$variable;
echo 
$variable;
echo 
$variable;
echo 
$variable;
echo 
$variable;
echo 
$variable;
echo 
$variable;
?>

A Liste von Argumenten Ø 348,0 ns
B Einzelnes Argument Ø 360,7 ns

Eine Liste von Argumenten ist schneller, als immer nur ein echo mit einem einzelnem Argument.

strtr() oder str_replace()

<?php
// str_replace
$search = ["b""c""d"];
$replace = ["2""3""4"];
for (
$i 0$i 1000000; ++$i)
{
    
str_replace($search$replace"abcd");
}

// strtr
$params = ["b" => "2""c" => "3""d" => "4"];
for (
$i 0$i 1000000; ++$i)
{
    
strtr("abcd"$params);
}
?>

A str_replace() Ø 187,3 ns
B strtr() Ø 163,1 ns

strtr() ist schneller als str_replace()

Integer

Eine Zahl mit intval() oder (int) konvertieren

<?php
// intval
intval(10.5);

// (int)
(int) 10.5;
?>

A intval Ø 29,5 ns
B (int) Ø 25,3 ns

(int) ist schneller als intval().

Additionsverfahren oder Postinkrement

<?php
// Addition
$i += 1;

// Postinkrement
$i++;
?>

A Addition Ø 28,1 ns
B Inkrement Ø 21,9 ns

Inkrement $i++; ist schneller als Addition $i += 1;

Postinkrement oder Präinkrement

<?php
// Postinkrement
$i++;

// Präinkrement
++$i;
?>

A Postinkrement Ø 25,7 ns
B Präinkrement Ø 16,5 ns

Präinkrement ++$i; ist schneller als Postinkrement $i++;.

Arrays

array_push() oder die $array[] Methode

<?php
// array_push Funktion
array_push($arr$value);

// $array[] method
$array[] = $value;
?>

A array_push() Ø 87,7 ns
B $array[] method Ø 36,6 ns

Die $array[] Methode ist schneller als array_push().

Fakten zum PHP Geschwindigkeitstest

Zum Testen der Geschwindigkeit von PHP Code, wurden immer 2 unterschiedliche Varianten miteinander verglichen. (A-B Test) Es gab immer 3 Programmdurchläufe, aus denen dann die jeweilige Durchschnittsgeschwindigkeit ermittelt wurde. Die zeitliche Differenz wurde extra nicht Prozentual aufgezeigt, weil die Unterschiede leicht schwankten.
Viele Benchmark-Tests fallen auch in den Bereich der Micro Optimierung. Aber eine detaillierte Auswertung dürfte trotzdem sehr interessant sein.

Grundsätzlich: Der Programmcode, sollte in Softwareprojekten (wenn möglich), immer von Anfang gut durchdacht und optimal geschrieben werden. Eine nachträgliche Optimierung, bezüglich mehr Geschwindigkeit, ist meist extrem Zeitaufwendig.

Umgebung vom Benchmark-Test: CPU Intel Core i7-4700K 4GHz, RAM 32 GB, Windows 10 Pro 64 Bit, PHP Version 7.1

Fazit

Es sollte verständlich sein, das man während der Entwicklung, immer versuchen sollte Fehler zu vermeiden. Und diese nicht nur mit @ unterdrücken. Der Test zeigt, das es bei vielen Möglichkeiten, nicht relevant ist, für welche Funktion man sich entscheidet. Wenn man im Team oder größeren Projekten arbeitet, gibt es eventuell auch Richtlinien, an denen man sich halten muss.
Ich hoffe, das einige etwas von diesem Beitrag „Geschwindigkeit von PHP optimieren“ mitnehmen.

Relevante Unterschiede wurden bei Addition, Postinkrement und Präinkrement festgestellt.
Präinkrement ++$i ist da der Testsieger. Und schneller als $i++ oder $i += 1
Hat man die Möglichkeit, sich zwischen str_replace() und strtr() entscheiden zu können, würde ich strtr() immer bevorzugen.