Optimalizácia opakovania ťažkých operácií v JavaScripte
V predchádzajúcej lekcii opakované volania funkcií v skutočnosti zaberajú veľmi málo času a naša optimalizácia ušetrí nie veľa. Avšak, všetko bude oveľa horšie, ak budeme niekoľko krát volať "ťažkú" funkciu, ktorá vykonáva sa dostatočne dlhý čas.
Nechajme, napríklad, máme funkciu, ktorá nachádza delitele čísla:
function getDivisorsSum(num) {
let res = 0;
for (let i = 1; i <= num; i++) {
if (num % i === 0) {
res += i;
}
}
return res;
}
Je zrejmé, že táto funkcia je dostatočne "ťažká". Preto zlým nápadom bude napísať takýto kód:
let num = 123456;
if (getDivisorsSum(num) >= 10 && getDivisorsSum(num) <= 100) {
console.log('+++');
} else {
console.log('---');
}
Samozrejme, lepšie je vykonať "ťažkú" operáciu raz a výsledok zapísať do premennej, a potom použiť túto premennú na potrebných miestach:
let num = 123456;
let sum = getDivisorsSum(num);
if (sum >= 10 && sum <= 100) {
console.log('+++');
} else {
console.log('---');
}
Optimalizujte nižšie uvedený kód:
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;
}