Optymalizacja łączenia zmiennych w PHP. Podwójny cudzysłów czy apostrof | Optymalizacja PHP

Zainspirowany pewnym artykułem dotyczącym optymalizacji cytowania stringów – podczas wyświetlania lub łączenia zmiennych postanowiłem zrobić własny test.
W PHP do cytowania stringów można użyć znaku apostrofa lub cudzysłowu, dodatkowo zmienne zapisane w podwójnym cudzysłowu można zapisać w nawiasach klamrowych. Który sposób jest bardziej wydajny – poniżej wyniki testu.

Sposoby cytowania tekstu – przypisywania zmiennych:
// Sposób 1: tekst łączony za pomocą apostrofa – zewnętrznie
$x = $a.’ ‘.$b.’ ‘.$c;
// Sposób 2: tekst łączony za pomocą cudzysłowu – zewnętrznie
$x = $a.” “.$b.” “.$c;
// Sposób 3: tekst łączony za pomocą cudzysłowu – wewnętrznie
$x = “$a $b $c”;
// Sposób 4: tekst łączony za pomocą cudzysłowu – wewnętrznie, zmienne w nawiasach klamrowych
$x = “${a} ${b} ${c}”;

Skrypt testujący:
<?php
function microtime_float() {
list($usec, $sec) = explode(” “, microtime());
return ((float)$usec + (float)$sec);
}
$czas1 = microtime_float();
for($a=0;$a<100;$a++)
for($b=0;$b<100;$b++)
for($c=0;$c<100;$c++)
// wstawić wybrany sposób;
$czas2 = microtime_float();
echo round($czas2-$czas1,6);
?>

Jak widać test polega na prostej iteracji trzech zmiennych i przypisaniu ich do jednej zmiennej. Każda sposób jest przetestowany za pomocą miliona podstawień (100x100x100).

Wyniki testowania:
<pre>
Test nr.1: 1,017789, Test nr.2: 0,971977, Test nr.3: 0,891271, Test nr.4: 0,868639
Test nr.1: 1,004230, Test nr.2: 0,987173, Test nr.3: 0,905349, Test nr.4: 0,895470
Test nr.1: 1,006419, Test nr.2: 0,997731, Test nr.3: 0,892430, Test nr.4: 0,870490
Średnia 1: 1,009479, Średnia 2: 0,985627, Średnia 3: 0,896350, Średnia 4: 0,878200
</pre>

Wnioski:
Wyniki testu dotyczą miliona podstawień – zatem różnica kilku milisekund w poszczególnych testach to bardzo niewiele jeżeli chodzi o optymalizację skryptów PHP.
Jednak mimo wszystko można zauważyć, iż cytowanie stringów (przepisywanie zmiennych) za pomocą podwujnego cudzysłowu jest trochę szybsze od apostrofa.
Dodatkowo cytowanie za pomocą podwójnego cudzysłowu realizowane wewnętrzne jest szybsze od łączenia zewnętrznego.
Najlepszym i najszybszym sposobem jest cytowanie w podwójnych cudzysłowach ze zmiennymi ujętymi w nawiasy klamrowe – realizowane przez łączenie wewnętrzne.
Wyniki testu są tym bardziej zaskakujące, iż na wielu serwisach dotyczących optymalizacji wnioski były odwrotne.
Ciekawe z czego to wynika… (ze sprzętu, wersji PHP, …)?

This entry was posted in Optymalizacja, PHP and tagged , , , , , , , . Bookmark the permalink.

Leave a Reply