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:
- Für die beste Performance in der PHP Entwicklung
- Zum Performance Test: Was ist schneller
- Strings
- Echo mit doppelten oder einfachen Anführungszeichen
- Echo mit einer Liste von Argumenten oder einzelnes Argument
- strtr() oder str_replace()
- Integer
- Eine Zahl mit intval() oder (int) konvertieren
- Additionsverfahren oder Postinkrement
- Postinkrement oder Präinkrement
- Arrays
- array_push() oder die $array[] Methode
- Fakten zum PHP Geschwindigkeitstest
- 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 zwischenstr_replace()
undstrtr()
entscheiden zu können, würde ichstrtr()
immer bevorzugen.