Optimizacija ponavljanja teških operacija u JavaScript-u
U prethodnoj lekciji ponovni pozivi funkcija zapravo oduzimaju vrlo malo vremena i naša optimizacija će uštedeti ne mnogo. Međutim, sve će biti mnogo gore ako više puta pozovemo "tešku" funkciju, koja se izvršava prilično dugo.
Neka, na primer, imamo funkciju koja pronalazi delioce broja:
javascriptfunction getDivisorsSum(num) {
let res = 0;
for (let i = 1; i <= num; i++) {
if (num % i === 0) {
res += i;
}
}
return res;
}
Očigledno je da je ova funkcija prilično "teška". Stoga će loša ideja biti napisati ovakav kod:
javascriptlet num = 123456;
if (getDivisorsSum(num) >= 10 && getDivisorsSum(num) <= 100) {
console.log('+++');
} else {
console.log('---');
}
Bolje je, naravno, izvršiti "tešku" operaciju samo jednom i rezultat upisati u promenljivu, a zatim koristiti tu promenljivu na potrebnim mestima:
javascriptlet num = 123456;
let sum = getDivisorsSum(num);
if (sum >= 10 && sum <= 100) {
console.log('+++');
} else {
console.log('---');
}
Задание 1
Optimizujte kod dat ispod:
javascriptlet num = 1233456789;
if (getSumSquare(num) >= 10 && getSumSquare(num) <= 100) {
console.log('+++');
} else {
console.log('---');
}
function getSumSquare(num) {
let digits = String(num).split('');
let sum = 0;
for (let digit of digits) {
sum += digit ** 2;
}
return sum;
}