Wydajność funkcji echo w PHP. Echo vs Podstawienie pod zmienną – testy.

Zastanawialiście się kiedyś ile milisekund, lub nawet sekund można stracić używając funkcji echo. Oczywiście strata dotyczy tylko przypadku w którym funkcja echo jest wywoływana kilkanaście razy, zamiast np. tekst podstawić pod jedną zmienną i tylko raz wywołać funkcję echo.

Proste przykłady z życia programisty PHP – na wyświetlenie tabelki:
Przykład nr 1.
<?php
echo ‘<table>’;
echo ‘<tr>’;
echo ‘<td></td>’;
echo ‘<td></td>’;
echo ‘</tr>’;
echo ‘</table>’;
?>

Przykład nr 2.
<?php
$tabelka = ‘
<table>
<tr>
<td></td>
<td></td>
</tr>
</table>
‘;
echo $tabelka;
?>

Przykład nr 3.
<?php
echo ‘
<table>
<tr>
<td></td>
<td></td>
</tr>
</table>
‘;
?>

Który sposób jest najlepszy, a który najgorszy?

Schemat testowania .
Testowanie odbyło się z linii poleceń PHP. Poniżej przedstawiam kod testowania funkcji. Pierwszy sposób to wielokrotne podstawienie pod zmienną i wyświetlenie po zakończeniu iteracji, drugi sposób to wielokrotne wyświetlenie. Dla pewności, skrypt został uruchomiony 3 razy dla każdego sposobu.

Kod testowania funkcji:
<?php
function microtime_float() {
list($usec, $sec) = explode(” “, microtime());
return ((float)$usec + (float)$sec);
}
$x = ”;
$czas1 = microtime_float();
// Sposób nr 1: Wielokrotne podstawienie pod zmienną, jedno wyświetlenie
// for($i=0;$i<100000;$i++) $x .= $i; echo $x;
// Sposób nr 2: Wielokrotne wyświetlenie zmiennej, bez podstawiania
// for($i=0;$i<100000;$i++) echo $i;
$czas2 = microtime_float();
$czas0 = round($czas2-$czas1,6);
?>

Wyniki testowania:
<pre>
Test nr. 1: 1,124184  Test nr. 2: 11,096614
Test nr. 1: 1,125416  Test nr. 2: 11,200453
Test nr. 1: 1,122321  Test nr. 2: 11,202271
Średnia: 1: 1,123973, Średnia: 2: 11,166446
</pre>

Wnioski:
Sposób nr. 1 i sposób nr. 2 doprowadzi nas do tego samego wyniku (zostanie wyświetlony ciąg licz od 0 do 10 tys.), jednak wyniki testu są oczywiste.
Podstawianie w języku PHP jest bardzo zoptymalizowane.
Np. instrukcja typu: for($i=0;$i<1000000;$i++) $x .= $i; – zostanie wykonana w zaledwie 0,5 sek. (pół sekundy i milion podstawień tworzący ciąg tekstowy).
Funkcja echo – służąca do wyświetlania zmiennych tekstu na standardowe wyjście, też jest mocno zoptymalizowana, jednak częste używanie funkcji spowalnia skrypty.
Lepiej podstawić ciąg tekstowy pod jedną zmienną, którą na samym końcu wyświetlimy jednym wywołaniem: echo $zmienna;

Podsumowanie:
1. Każda operacja w PHP zużywa czas.
2. Operacja podstawienia (np. $zmienna = ‘wartość’) jest bardzo zoptymalizowana.
3. Operacja wywołania echo jest zoptymalizowana, jednak często wywoływana jest wolniejsza od podstawienia pod jedną zmienną i wyświetlenia tej zmiennej.
Wniosek: Więcej podstawień, mniej wywołań echo, to lepsza optymalizacja i szybszy kod PHP.

Teraz już wiecie który przykład z wyświetleniem tabelki jest najszybszy!
Oczywiście przykład nr.1 – jest najgorszy – funkcja echo jest niepotrzebnie wywoływana 6 razy, natomiast przykład nr.3 – jest najlepszy – jedno wywołanie funkcji echo.

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

Leave a Reply