Optimizarea repetării operațiilor grele în JavaScript
În lecția precedentă, apelurile repetate ale funcțiilor de fapt ocupă foarte puțin timp și optimizarea noastră va economisi nu foarte mult. Cu toate acestea, va fi mult mai rău dacă vom face de mai multe ori apelul unei funcții "grele" care se execută suficient de mult timp.
Să presupunem, de exemplu, că avem o funcție care găsește divizorii unui număr:
function getDivisorsSum(num) {
let res = 0;
for (let i = 1; i <= num; i++) {
if (num % i === 0) {
res += i;
}
}
return res;
}
Evident, această funcție este suficient de "grele". Prin urmare, va fi o idee proastă să scriem un astfel de cod:
let num = 123456;
if (getDivisorsSum(num) >= 10 && getDivisorsSum(num) <= 100) {
console.log('+++');
} else {
console.log('---');
}
Mai bine, desigur, este să executăm operația "grele" o singură dată și să scriem rezultatul într-o variabilă, apoi să folosim această variabilă în locurile necesare:
let num = 123456;
let sum = getDivisorsSum(num);
if (sum >= 10 && sum <= 100) {
console.log('+++');
} else {
console.log('---');
}
Optimizați codul de mai jos:
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;
}