Wir (hier im Forum) hatten genau das Thema schon mal (als PHP 7.2 neu war) und das Ergebnis hatte uns damals alle überrascht:
Zum selbst Testen:
<?php
# 1.php
$row["user"]="fritz";
$row["score"]=34;
$row["timestamp"]='2022-12-30';
for ($i=1;$i<100000;$i++) {
echo "user: ", $row["user"], " - score: ", $row["score"], " ", $row["timestamp"], "<br>";
}
<?php
#2.php
$row["user"]="fritz";
$row["score"]=34;
$row["timestamp"]='2022-12-30';
for ($i=1;$i<100000;$i++) {
echo "user: ". $row["user"]. " - score: ". $row["score"]. " ". $row["timestamp"]. "<br>";
}
Im Terminal ausgeführt (und die Ausgaben nach /dev/null umgeleitet) ist die Variante mit Konkatenierung stabil um den Faktor 3 schneller:
time 1.php > /dev/null
real 0m1,026s
user 0m0,523s
sys 0m0,472s
time 2.php > /dev/null
real 0m0,347s
user 0m0,126s
sys 0m0,186s
„Unverwässert“ durch z.b. ohne Zeiten für das Starten des Interpreters (user-time), wird sogar weniger als 1/4 der Zeit gebraucht. (Getestet auf Raspi4 mit PHP 8.2.0RC7 (cli) (built: Nov 26 2022 14:19:44) (NTS) )
Testsieger: Volles Konkatenieren des Outputs:
<?php
# 3.php
$row["user"]="fritz";
$row["score"]=34;
$row["timestamp"]='2022-12-30';
$out='';
for ($i=1;$i<100000;$i++) {
$out.="user: ". $row["user"]. " - score: ". $row["score"]. " ". $row["timestamp"]. "<br>";
}
echo $out;
time 3.php > /dev/null
real 0m0,197s
user 0m0,086s
sys 0m0,074s
Letzte Mikrooptimierung: Ersparen des Nachsehens, ob in den Strings etwas ersetzt werden muss ("
→ '
):
<?php
# 4.php
$row["user"]="fritz";
$row["score"]=34;
$row["timestamp"]='2022-12-30';
$out='';
for ($i=1;$i<100000;$i++) {
$out.='user: '. $row['user']. ' - score: '. $row['score']. ' '. $row['timestamp']. '<br>';
}
echo $out;
time 4.php > /dev/null
real 0m0,192s
user 0m0,109s
sys 0m0,055s