Sunkios operacijos PHP optimizavimas
Ankstesnėje pamokoje pakartotiniai funkcijų iškvietimai iš tikrųjų užima labai mažai laiko ir mūsų optimizavimas sutaupys nelabai daug. Tačiau, viskas bus daug blogiau, jei kelis kartus skambinsime "sunkia" funkcija, kuri vykdoma pakankamai ilgai.
Tarkime, pavyzdžiui, kad turime funkciją, kuri randa skaičiaus daliklius:
<?php
function getDivisors($num) {
$result = [];
for ($i = 1; $i <= $num; $i++) {
if ($num % $i == 0) {
$result[] = $i;
}
}
return $result;
}
?>
Akivaizdu, kad ši funkcija yra pakankamai "sunki". Todėl bloga idėja būtų parašyti tokį kodą:
<?php
$num = 123456;
if (array_sum(getDivisors($num)) >= 10 and array_sum(getDivisors($num)) <= 100) {
} else {
}
?>
Žinoma, geriau atlikti "sunkų" operaciją vieną kartą ir rezultatą įrašyti į kintamąjį, o tada naudoti tą kintamąjį reikiamose vietose:
<?php
$num = 123456;
$sum = array_sum(getDivisors($num));
if ($sum >= 10 and $sum <= 100) {
} else {
}
?>
Optimizuokite žemiau pateiktą kodą:
<?php
$num = 1233456789;
if (getSumSquare($num) >= 10 and getSumSquare($num) <= 100) {
echo 'teisinga';
} else {
echo 'neteisinga';
}
function getSumSquare($num) {
$digits = explode('', $num);
$sum = 0;
foreach ($digits as $digit) {
$sum += $digit * $digit;
}
return $digit;
}
?>