Christian Seiler: Strings: einfaches vs. doppeltes Hochkomma: Benchmarks

Beitrag lesen

Hallo the-FoX,

der Unterschied zwischen einfachem und doppeltem Hochkommata liegt in der Ausführungszeit.

Ich habe das auch lange geglaubt. Ich wollte das nun einfach mal testen. Allerdings lässt sich kein merklicher Unterschied feststellen; ich gehe davon aus, dass die Unterschiede sowieso für das Starten des PHP-Interpreters 'draufgehen', der jedes Mal eine etwas andere Menge Zeit braucht. [1]

Hier mal die Meßergebnisse: (jeweils 4 durchläufe und die Durschnittswerte genommen)

<?php

for ($i = 0; $i < 1000*1000; $i++) {
        $string = "blub!!!!!!!!!!!!!\n\n\n";
}

?>

Ergibt:

real    0m1.798s
user    0m1.800s
sys     0m0.002s

<?php

for ($i = 0; $i < 1000*1000; $i++) {
        $string = 'blub!!!!!!!!!!!!!\n\n\n';
}

real    0m1.816s
user    0m1.798s
sys     0m0.002s

(mir ist klar, dass im zweiten Beispiel \n nicht ersetzt wird, ich wollte nur die zu verarbeitenden Daten gleich halten)

Falls jemand jetzt argumentiert, der Benchmark sei nicht akzeptabel, weil ja nur das gleiche Stück Code immer wieder ausgeführt wird: Ich habe mal versucht, ein Script zu schreiben, das eine Million PHP-Zeilen, die nur

$string = "Hallo\n";

bzw.

$string = 'Hallo\n';

lauten, schreibt. Beim Ausführen der erzeugten Datei musste ich erst mein Memory Limit hochschrauben, danach ist PHP mit einer "Segmentation Fault" abgestürzt. Ich musste die Anzahl an Zeilen auf 10000 reduzieren, damit PHP in diesem Fall überhaupt durchgelaufen ist. Da stellte ich dann auch keinen wirklichen Unterschied fest. Und wer mehr als 10000 Strings auf einmal in einem PHP-Script braucht, dürfte andere Performance-Bremsen als die Strings selbst haben.

Ich habe den Benchmark mit der Schleife auch 10 Millionen mal durchgeführt und es war immernoch kein wirklicher Unterschied festzustellen.

Achja, PHP-Version: 4.3.2, Debian GNU/Linux.

Viele Grüße,
Christian

[1] Der PHP-Interpreter beim Verarbeiten einer leeren PHP-Datei schwankt bei mir in der Ausführungszeit zwischen minimal

real    0m0.038s
user    0m0.020s
sys     0m0.000s

und maximal

real    0m0.042s
user    0m0.040s
sys     0m0.020s

(wenn auf dem Rechner sonst keine Last herrscht) Damit ließen sich die Ausführungsdifferenzen erklären.