Optimering av upprepning av tunga operationer i PHP
I föregående lektion tog de upprepade funktionsanropen egentligen väldigt lite tid och vår optimering skulle inte spara särskilt mycket. Men det blir mycket värre om vi flera gånger anropar en "tung" funktion som tar ganska lång tid att utföra.
Låt oss till exempel säga att vi har en funktion som hittar delare av ett tal:
<?php
function getDivisors($num) {
$result = [];
for ($i = 1; $i <= $num; $i++) {
if ($num % $i == 0) {
$result[] = $i;
}
}
return $result;
}
?>
Uppenbarligen är denna funktion ganska "tung". Därför är det en dålig idé att skriva kod som ser ut så här:
<?php
$num = 123456;
if (array_sum(getDivisors($num)) >= 10 and array_sum(getDivisors($num)) <= 100) {
} else {
}
?>
Det är naturligtvis bättre att utföra den "tunga" operationen en gång och spara resultatet i en variabel, och sedan använda den variabeln på de ställen där den behövs:
<?php
$num = 123456;
$sum = array_sum(getDivisors($num));
if ($sum >= 10 and $sum <= 100) {
} else {
}
?>
Optimera koden nedan:
<?php
$num = 1233456789;
if (getSumSquare($num) >= 10 and getSumSquare($num) <= 100) {
echo 'korrekt';
} else {
echo 'inkorrekt';
}
function getSumSquare($num) {
$digits = explode('', $num);
$sum = 0;
foreach ($digits as $digit) {
$sum += $digit * $digit;
}
return $digit;
}
?>