Optimalizace opakování náročných operací v PHP
V předchozí lekci opakovaná volání funkcí ve skutečnosti zabrala velmi málo času a naše optimalizace by ušetřila ne příliš mnoho. Avšak, vše bude mnohem horší, pokud budeme několikrát provádět volání "těžké" funkce, která vykonává dostatečně dlouhou dobu.
Předpokládejme například, že máme funkci, která najde dělitele čísla:
<?php
function getDivisors($num) {
$result = [];
for ($i = 1; $i <= $num; $i++) {
if ($num % $i == 0) {
$result[] = $i;
}
}
return $result;
}
?>
Je zřejmé, že tato funkce je dostatečně "těžká". Proto by bylo špatným nápadem napsat takový kód:
<?php
$num = 123456;
if (array_sum(getDivisors($num)) >= 10 and array_sum(getDivisors($num)) <= 100) {
} else {
}
?>
Lepší je samozřejmě provést "těžkou" operaci jedenkrát a výsledek zapsat do proměnné, a potom použít tuto proměnnou na potřebných místech:
<?php
$num = 123456;
$sum = array_sum(getDivisors($num));
if ($sum >= 10 and $sum <= 100) {
} else {
}
?>
Optimalizujte níže uvedený kód:
<?php
$num = 1233456789;
if (getSumSquare($num) >= 10 and getSumSquare($num) <= 100) {
echo 'správně';
} else {
echo 'nesprávně';
}
function getSumSquare($num) {
$digits = explode('', $num);
$sum = 0;
foreach ($digits as $digit) {
$sum += $digit * $digit;
}
return $digit;
}
?>