Eine sehr interessante für alle PHP-Entwickler: The PHP Benchmark testet typische PHP-Code-Schnipsel, vergleicht ihre Geschwindigkeit und räumt dabei mit dem einen oder anderen Vorurteil auf.
$tmp[] = 'aaaaaaaaaaaaaaaaaaaa'; // 195 µs
$tmp[] = "aaaaaaaaaaaaaaaaaaaa"; // 193 µs
Ja, die Lehrbücher müssen neu geschrieben werden. Wie oft hat man nicht schon gehört und gelesen, dass das einfache Anführungszeichen ja soviel schneller ist, weil es sich selbst nicht auf enthaltene Variablen überprüfen muss. Klingt ja soweit auch schlüssig… Chris Vincent hingegen hat einfach mal einen Test gemacht. Er fand heraus, dass es ziemlich egal ist, welche Variante man nimmt.
Und genau auf diese Weise klärt die Seite viele Fragen, die man sich vielleicht noch nie gestellt hat. Einige überraschen, andere bestätigen was man schon immer gedacht hat:
===
ist schneller als==
- Switch und If-Elseif-Else-Schleifen unterscheiden sich nicht
- Operationen im Schleifenkopf sind unfassbar schlecht, z.B.
for($x=0; $x = sizeof($array); $x++)
- Noch ein Klassiker widerlegt:
echo 'aa'.'aa'
ist sehr viel schneller alsecho 'aa','aa'
Aber all das kann die Seite selbst sehr viel besser darstellen und erklären. Hier sollte jeder PHP-Entwickler einmal drübergucken.
Coole Seite!
Ich glaube, dass durch das automatische Zwischenspeichern des Bytecodes sehr viele der alten Benchmarks obsolet geworden sind. Die Benchmarks auf der Webseite wegen
echo "a","b";
vs.echo "a"."b";
machen ja keinen Sinn, weil der Compiler im zweiten Teil schon alles zusammenbauen kann. Wenn dort eine Variable auftaucht, die nicht statisch ist, müsste eigentlich die Variante mit „,“ schneller sein.Ich sehe gerade, dass der Benchmark dort ja auch das so rausbekommen hat. Der Compiler baut also noch nicht mal statische Variablen ein? Schlecht…
Und das mit sizeof und count verstehe ich auch nicht. Angeblich ist sizeof ein Alias von count und nicht umgedreht:
http://php.net/manual/de/function.sizeof.php
Von einem Zwischenspeichern des Byte-Codes bei PHP habe ich noch nicht gehört. Es gibt einige externe PHP-Compiler (z.B. von Zend), PHP selber bringt aber keinen mit. Insofern kann es die Unterschiede da auch nicht geben.
Es geht darum, die einmal vor dem Schleifenkopf zu berechnen, statt immer wieder beim Abbruchstest:
$size = count($bla);
for ($x = 0; $x < $size....
Ja, aber die machen auch den Vergleich zwischen „count“ und „sizeof“, wobei „sizeof“ gewinnt…
Ich habe mal irgendwo gelesen, dass der seit einer bestimmten Version immer mitinstalliert wird.
Du hast recht. Erst ab PHP6 wird es vollständig mit drin sein. Aber in Ubuntu gibt es schon Pakete dafür. Habe es mal auf dem Server installiert:
php-apc
Sehr interessant, danke!
Lustigerweise wurde die Entwicklung von PHP 6 eingestellt. Aber gut, wenn es so einfach mit Extrapakteten geht.