PHP-s raskete operatsioonide kordamise optimeerimine
Eelmises õppetükis võtsid funktsioonide korduvad väljakutsed tegelikult väga vähe aega ja meie optimeerimine ei säästa eriti palju. Kuid olukord muutub palju hullemaks, kui teeme mitu korda väljakutse "raskele" funktsioonile, mis võtab täitmiseks piisavalt kaua aega.
Oletame näiteks, et meil on funktsioon, mis leiab arvu jagajad:
<?php
function getDivisors($num) {
$result = [];
for ($i = 1; $i <= $num; $i++) {
if ($num % $i == 0) {
$result[] = $i;
}
}
return $result;
}
?>
Ilmselgelt on see funktsioon piisavalt "raske". Seetõttu oleks halb mõte kirjutada selline kood:
<?php
$num = 123456;
if (array_sum(getDivisors($num)) >= 10 and array_sum(getDivisors($num)) <= 100) {
} else {
}
?>
Muidugi on parem teha "raske" operatsioon üks kord ja kirjutada tulemus muutujasse, seejärel kasutada seda muutujat vajalikes kohtades:
<?php
$num = 123456;
$sum = array_sum(getDivisors($num));
if ($sum >= 10 and $sum <= 100) {
} else {
}
?>
Optimeerige allolev kood:
<?php
$num = 1233456789;
if (getSumSquare($num) >= 10 and getSumSquare($num) <= 100) {
echo 'õige';
} else {
echo 'vale';
}
function getSumSquare($num) {
$digits = explode('', $num);
$sum = 0;
foreach ($digits as $digit) {
$sum += $digit * $digit;
}
return $digit;
}
?>