Jörg Reinholz: PHP Variablen übergabe in welcher Form sinnvoll?

Beitrag lesen

Moin!

Die Rückschlüsse auf die Performance sind heute nicht mehr gültig (falls sie das überhaupt je waren). Auf http://www.phpbench.com/ gibt es ein paar Benchmarks die diesem Mythos zumindest die Luft aus den Segeln nehmen sollten.

Tatsächlich!

Ich habe mal selbst "gebenchmarkt". Die folgenden Ergebnisse mögen naturgemäß situationsbedingt leicht schwanken, sind aber von der Reihenfolge her reproduzierbar.

Skript:

<?php
$a = 'aaaaaaa';
$b = 'bbbbbbb';
$c = 'ccccccc';
$d = 'ddddddd';

define('M', 1000000);
define('NL', "\n");

ob_start();
$s = microtime(true);
for ($i=0; $i<M; $i++) {
    echo $i, ' : ', $a, $b, $c, $d, NL;
}
ob_end_clean();
echo 'Komma: ', ( microtime(true) - $s), 's', NL;

ob_start();
$s = microtime(true);
for ($i=0; $i<M; $i++) {
    echo $i . ' : ' . $a . $b . $c . $d . NL;
}
ob_end_clean();
echo 'Punkt: ', (microtime(true) - $s), 's', NL;

ob_start();
$s = microtime(true);
for ($i=0; $i<M; $i++) {
    echo "$i : $a $b $c $d\n";
}
ob_end_clean();
echo 'String:' , (microtime(true) - $s) , 's', NL;

Tests:

1. PHP 5.5.9-1ubuntu4.14 (cli) (built: Oct 28 2015 01:34:46)

fastix@trainer:/tmp$ php test.php 
Komma: 0.57300615310669s
Punkt: 0.59544205665588s
String:0.53846502304077s

2. HipHop VM 3.11.1 (rel) (hhvm)

fastix@trainer:/tmp$ hhvm test.php
Komma: 0.33236718177795s
Punkt: 0.21430087089539s
String:0.26826691627502s

3. PHP 7.0.3-3+deb.sury.org~trusty+1 (cli) ( NTS ) auf einem Raspberry 2b+
Bitte beachten: Ein Armel ist definitiv langsamer als ein Intel oder AMD. Dafür zieht der aber auch nur ganz wenig Strom.

trainer@home:/tmp$ php /tmp/test.php 
Komma: 2.8800621032715s
Punkt: 3.3124830722809s
String:2.4350960254669s

Ich bin tatsächlich überrascht, dass unter hhvm der concatenierte String $i . ' : ' . $a . $b . $c . $d . NL so schnell ist. Ganz überrascht hat mich dann php 5.5.9 und php7 mit dem schnellen "Stringbuilder" "$i : $a $b $c $d\n".

Jörg Reinholz