Sunkios operacijos kartojimo optimizavimas JavaScript
Ankstesnėje pamokoje pakartotiniai funkcijų iškvietimai užima labai mažai laiko ir mūsų optimizacija sutaupys nedaug. Tačiau, viskas bus daug blogiau, jei kelis kartus iškviesime "sunkią" funkciją, kuri vykdoma pakankamai ilgai.
Tarkime, pavyzdžiui, kad turime funkciją, kuri randa skaičiaus daliklius:
function getDivisorsSum(num) {
let res = 0;
for (let i = 1; i <= num; i++) {
if (num % i === 0) {
res += i;
}
}
return res;
}
Akivaizdu, kad ši funkcija yra pakankamai "sunki". Todėl bloga idėja būtų parašyti tokį kodą:
let num = 123456;
if (getDivisorsSum(num) >= 10 && getDivisorsSum(num) <= 100) {
console.log('+++');
} else {
console.log('---');
}
Žinoma, geriau atlikti "sunkų" veiksmą vieną kartą ir rezultatą įrašyti į kintamąjį, o tada naudoti tą kintamąjį reikiamose vietose:
let num = 123456;
let sum = getDivisorsSum(num);
if (sum >= 10 && sum <= 100) {
console.log('+++');
} else {
console.log('---');
}
Optimizuokite žemiau pateiktą kodą:
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;
}