Optimizacija ponavljanja težkih operacij v JavaScriptu
V prejšnji lekciji ponovni klici funkcij v resnici zasedejo zelo malo časa in naša optimizacija prihrani ne zelo veliko. Vendar pa bo vse veliko slabše, če bomo večkrat klicali "težko" funkcijo, ki se izvaja dokaj dolgo časa.
Recimo, na primer, da imamo funkcijo, ki poišče delitelje števila:
function getDivisorsSum(num) {
let res = 0;
for (let i = 1; i <= num; i++) {
if (num % i === 0) {
res += i;
}
}
return res;
}
Očitno je, da je ta funkcija precej "težka". Zato je slaba ideja napisati takšno kodo:
let num = 123456;
if (getDivisorsSum(num) >= 10 && getDivisorsSum(num) <= 100) {
console.log('+++');
} else {
console.log('---');
}
Bolje je, seveda, izvesti "težko" operacijo enkrat in rezultat zapisati v spremenljivko, nato pa uporabiti to spremenljivko na želenih mestih:
let num = 123456;
let sum = getDivisorsSum(num);
if (sum >= 10 && sum <= 100) {
console.log('+++');
} else {
console.log('---');
}
Optimizirajte spodnjo kodo:
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;
}