LocaHost.NET
Tools

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.
<?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.

» Regulamin

» Kontakt

MySQLPHPPhpMyAdminlocalhost127.0.0.1 © LocaHost.NET