Optimalizácia opakovania ťažkých operácií v PHP
V predchádzajúcej lekcii opakované volania funkcií v skutočnosti trvajú veľmi málo času a naša optimalizácia ušetrí nie veľa. Avšak, všetko bude oveľa horšie, ak budeme niekoľko krát volať "ťažkú" funkciu, ktorá vykonáva sa dostatočne dlhý čas.
Nech napríklad máme funkciu, ktorá nachádza delitele čísla:
<?php
function getDivisors($num) {
$result = [];
for ($i = 1; $i <= $num; $i++) {
if ($num % $i == 0) {
$result[] = $i;
}
}
return $result;
}
?>
Je zrejmé, že táto funkcia je dosť "ťažká". Preto zlým nápadom bude napísať takýto kód:
<?php
$num = 123456;
if (array_sum(getDivisors($num)) >= 10 and array_sum(getDivisors($num)) <= 100) {
} else {
}
?>
Lepšie je, samozrejme, vykonať "ťažkú" operáciu raz a výsledok zapísať do premennej, a potom použiť túto premennú na potrebných miestach:
<?php
$num = 123456;
$sum = array_sum(getDivisors($num));
if ($sum >= 10 and $sum <= 100) {
} else {
}
?>
Optimalizujte nižšie uvedený kód:
<?php
$num = 1233456789;
if (getSumSquare($num) >= 10 and getSumSquare($num) <= 100) {
echo 'správne';
} else {
echo 'nesprávne';
}
function getSumSquare($num) {
$digits = explode('', $num);
$sum = 0;
foreach ($digits as $digit) {
$sum += $digit * $digit;
}
return $digit;
}
?>