Optimalisering av gjentakelse av tunge operasjoner i PHP
I forrige leksjon tok gjentatte funksjonskall egentlig veldig lite tid og vår optimalisering vil ikke spare veldig mye. Imidlertid, alt blir mye verre hvis vi gjør flere kall til en "tung" funksjon som tar ganske lang tid å utføre.
La for eksempel si at vi har en funksjon som finner divisorer av et tall:
<?php
function getDivisors($num) {
$result = [];
for ($i = 1; $i <= $num; $i++) {
if ($num % $i == 0) {
$result[] = $i;
}
}
return $result;
}
?>
Det er åpenbart at denne funksjonen er ganske "tung". Derfor er det en dårlig idé å skrive kode som dette:
<?php
$num = 123456;
if (array_sum(getDivisors($num)) >= 10 and array_sum(getDivisors($num)) <= 100) {
} else {
}
?>
Det er selvfølgelig bedre å utføre den "tunge" operasjonen en gang og skrive resultatet til en variabel, og deretter bruke denne variabelen på de nødvendige stedene:
<?php
$num = 123456;
$sum = array_sum(getDivisors($num));
if ($sum >= 10 and $sum <= 100) {
} else {
}
?>
Optimaliser koden nedenfor:
<?php
$num = 1233456789;
if (getSumSquare($num) >= 10 and getSumSquare($num) <= 100) {
echo 'riktig';
} else {
echo 'feil';
}
function getSumSquare($num) {
$digits = explode('', $num);
$sum = 0;
foreach ($digits as $digit) {
$sum += $digit * $digit;
}
return $digit;
}
?>