Оптимизација понављања тешких операција у JavaScript-у
У претходној лекцији поновни позиви функција у ствари одузимају веома мало времена и наша оптимизација неће уштедети превише. Међутим, све ће бити много горе ако неколико пута правимо позив "тешке" функције, која се извршава прилично дуго.
Нека, на пример, имамо функцију која проналази делиоце броја:
function getDivisorsSum(num) {
let res = 0;
for (let i = 1; i <= num; i++) {
if (num % i === 0) {
res += i;
}
}
return res;
}
Очигледно је да је ова функција прилично "тешка". Зато ће лоша идеја бити да напишемо овакав код:
let num = 123456;
if (getDivisorsSum(num) >= 10 && getDivisorsSum(num) <= 100) {
console.log('+++');
} else {
console.log('---');
}
Боље је, наравно, извршити "тешку" операцију једном и резултат уписати у променљиву, а затим користити ту променљиву на потребним местима:
let num = 123456;
let sum = getDivisorsSum(num);
if (sum >= 10 && sum <= 100) {
console.log('+++');
} else {
console.log('---');
}
Оптимизујте код приказан испод:
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;
}