Optimizacija ponavljanja teških operacija u PHP-u
U prethodnoj lekciji ponovni pozivi funkcija zapravo oduzimaju vrlo malo vremena i naša optimizacija neće uštedeti mnogo. Međutim, sve će biti mnogo gore ako nekoliko puta izvršavamo poziv "teške" funkcije, koja se izvršava prilično dugo vreme.
Neka, na primer, imamo funkciju koja pronalazi delioce broja:
<?php
function getDivisors($num) {
$result = [];
for ($i = 1; $i <= $num; $i++) {
if ($num % $i == 0) {
$result[] = $i;
}
}
return $result;
}
?>
Očigledno je da je ova funkcija prilično "teška". Stoga bi loša ideja bila napisati ovakav kod:
<?php
$num = 123456;
if (array_sum(getDivisors($num)) >= 10 and array_sum(getDivisors($num)) <= 100) {
} else {
}
?>
Bolje je, naravno, izvršiti "tešku" operaciju jednom i rezultat upisati u promenljivu, a zatim koristiti tu promenljivu na potrebnim mestima:
<?php
$num = 123456;
$sum = array_sum(getDivisors($num));
if ($sum >= 10 and $sum <= 100) {
} else {
}
?>
Optimizujte donji kod:
<?php
$num = 1233456789;
if (getSumSquare($num) >= 10 and getSumSquare($num) <= 100) {
echo 'tačno';
} else {
echo 'netačno';
}
function getSumSquare($num) {
$digits = explode('', $num);
$sum = 0;
foreach ($digits as $digit) {
$sum += $digit * $digit;
}
return $digit;
}
?>