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.<?php 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: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
Wnioski:
Wniosek jest prosty, zamiast wywoływać kilka razy tę samą funkcję, lepiej skorzystaj ze zmiennej tymczasowej. Zaoszczędzisz czas i "pieniądze".
Artykuł utworzony: 2020-03-08 02:01:01: PHP, wydajność funkcji echo w php, optymalizacja kodu PHP, microtime_float, funkcja testująca.