Ottimizzazione della ripetizione di operazioni pesanti in PHP
Nella lezione precedente, le chiamate ripetute di funzioni in realtà richiedono molto poco tempo e la nostra ottimizzazione non farà risparmiare moltissimo. Tuttavia, le cose saranno molto peggiori se chiameremo più volte una funzione "pesante", che richiede un tempo abbastanza lungo per essere eseguita.
Supponiamo, ad esempio, di avere una funzione che trova i divisori di un numero:
<?php
function getDivisors($num) {
$result = [];
for ($i = 1; $i <= $num; $i++) {
if ($num % $i == 0) {
$result[] = $i;
}
}
return $result;
}
?>
È ovvio che questa funzione è abbastanza "pesante". Quindi sarebbe una cattiva idea scrivere un codice come questo:
<?php
$num = 123456;
if (array_sum(getDivisors($num)) >= 10 and array_sum(getDivisors($num)) <= 100) {
} else {
}
?>
Meglio, naturalmente, eseguire l'operazione "pesante" una sola volta e memorizzare il risultato in una variabile, per poi utilizzare questa variabile nei punti necessari:
<?php
$num = 123456;
$sum = array_sum(getDivisors($num));
if ($sum >= 10 and $sum <= 100) {
} else {
}
?>
Ottimizza il codice qui sotto:
<?php
$num = 1233456789;
if (getSumSquare($num) >= 10 and getSumSquare($num) <= 100) {
echo 'corretto';
} else {
echo 'non corretto';
}
function getSumSquare($num) {
$digits = explode('', $num);
$sum = 0;
foreach ($digits as $digit) {
$sum += $digit * $digit;
}
return $digit;
}
?>