Niepotrzebne wywołania funkcji w PHP – optymalizacja kodu

Ten artykuł to kolejna część optymalizacji kodu PHP – czyli szukamy cennych milisekund niepotrzebnie marnowanych w naszych skryptach PHP ;-)
Niepotrzebne wywołania funkcji w PHP, to przeważnie nieświadomie stworzone błędne konstrukcje, które opóźniają nasze skrypty. Należy pamiętać, iż każde wywołanie funkcji w PHP to dodatkowe obciążenie dla procesora i pamięci. Jeśli wynik działania funkcji używany jest w wielu miejscach, najlepiej jest go zapamiętać (podstawić pod zmienną) – i dalej operować na zmiennej, niż wywoływać tę samą funkcję z tymi samymi argumentami.

Klasycznym przykładem jest wywołanie funkcji for.
Np: for($i=0;$i<count($tab);$i++) { … };
Należy zauważyć, iż funkcja zliczająca ilość elementów tablicy count() wywoływana jest za każdym razem przebiegu pętli for.
Zamiast tego wynik działania tej funkcji można zapisać do zmiennej tymczasowej, a w warunku porównywać zmienną zamiast wartości funkcji.

Funkcja testująca:
<?php
function microtime_float() {
list($usec, $sec) = explode(” “, microtime());
return ((float)$usec + (float)$sec);
}
$tab = array();
for($i=0;$i<1000000;$i++) $tab[] = $i;

$czas1 = microtime_float();
// Sposob 1: funkcja for – wywołująca za każdym razem funkcję count()
// for($i=0;$i<count($tab);$i++) $temp = $tab[$i];
// Sposob 2: funkcja for – funkcja count() wywołana tylko raz
// for($i=0,$c=count($tab);$i<$c;$i++) $temp = $tab[$i];
$czas2 = microtime_float();
echo round($czas2-$czas1,6);
?>

Jak widać test polega na prostej iteracji do miliona razy. W pierwszym przypadku funkcja for wywołuje za każdym razem funkcję count(), w drugim przypadku wartość funkcji count() została zapisana pod zmienną $c – w części inicjalizującej zmienne.

Wyniki testowania:
<pre>
Test nr.1: 1,389940, Test nr.2: 0,996266
Test nr.1: 1,355410, Test nr.2: 0,999128
Test nr.1: 1,382061, Test nr.2: 0,969845
Średnia 1: 1,375804, Średnia 2: 0,988413
</pre>

Wnioski:
Wniosek jest prosty, zamiast wywoływać kilka razy tę samą funkcję, lepiej skorzystaj ze zmiennej tymczasowej. Zaoszczędzisz czas i “pieniądze”.

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

Leave a Reply