PHP: echo gegen print; ==, === oder switch?

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 als echo 'aa','aa'

Aber all das kann die Seite selbst sehr viel besser darstellen und erklären. Hier sollte jeder PHP-Entwickler einmal drübergucken.

Links

11 Kommentare

  1. 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.

  2. Ich sehe gerade, dass der Benchmark dort ja auch das so rausbekommen hat. Der Compiler baut also noch nicht mal statische Variablen ein? Schlecht…

  3. 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.

  4. Es geht darum, die einmal vor dem Schleifenkopf zu berechnen, statt immer wieder beim Abbruchstest:

    $size = count($bla);
    for ($x = 0; $x < $size....

  5. Ja, aber die machen auch den Vergleich zwischen „count“ und „sizeof“, wobei „sizeof“ gewinnt…

  6. 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

Kommentare sind geschlossen.