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:
function 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:
let 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:
let num = 123456;
let sum = getDivisorsSum(num);
if (sum >= 10 && sum <= 100) {
console.log('+++');
} else {
console.log('---');
}
Optimizujte kod dat ispod:
let 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;
}