Raskaiden PHP-operaatioiden toiston optimointi
Edellisessä oppitunnissa toistuvat funktiokutsut veivät todellisuudessa hyvin vähän aikaa, eikä optimointimme säästänyt kovin paljon. Kaikki on kuitenkin paljon pahempaa, jos teemme useita kertoja kutsun "raskaaseen" funktioon, joka vie suorittamiseen melko paljon aikaa.
Oletetaan esimerkiksi, että meillä on funktio, joka löytää luvun jakajat:
<?php
function getDivisors($num) {
$result = [];
for ($i = 1; $i <= $num; $i++) {
if ($num % $i == 0) {
$result[] = $i;
}
}
return $result;
}
?>
On ilmeistä, että tämä funktio on melko "raskas". Siksi olisi huono idea kirjoittaa seuraavanlaista koodia:
<?php
$num = 123456;
if (array_sum(getDivisors($num)) >= 10 and array_sum(getDivisors($num)) <= 100) {
} else {
}
?>
On tietysti parempi suorittaa "raskas" operaatio kerran ja tallentaa tulos muuttujaan, ja sitten käyttää tätä muuttujaa tarvittavissa paikoissa:
<?php
$num = 123456;
$sum = array_sum(getDivisors($num));
if ($sum >= 10 and $sum <= 100) {
} else {
}
?>
Optimoi alla oleva koodi:
<?php
$num = 1233456789;
if (getSumSquare($num) >= 10 and getSumSquare($num) <= 100) {
echo 'oikein';
} else {
echo 'väärin';
}
function getSumSquare($num) {
$digits = explode('', $num);
$sum = 0;
foreach ($digits as $digit) {
$sum += $digit * $digit;
}
return $digit;
}
?>