Optimizimi i përsëritjes së operacioneve të rënda në JavaScript
Në mësimin e mëparshëm, thirrjet e përsëritura të funksioneve në fakt zënë shumë pak kohë dhe optimizimi ynë nuk do të kursejë shumë. Megjithatë, gjithçka do të jetë shumë më keq nëse bëjmë disa thirrje të një funksioni "të rëndë" i cili kërkon një kohë mjaft të gjatë për t'u ekzekutuar.
Le të themi, për shembull, që kemi një funksion që gjen pjesëtuesit e një numri:
function getDivisorsSum(num) {
let res = 0;
for (let i = 1; i <= num; i++) {
if (num % i === 0) {
res += i;
}
}
return res;
}
Është e qartë se ky funksion është mjaft "i rëndë". Prandaj, do të ishte një ide e keqe të shkruanim këtë kod:
let num = 123456;
if (getDivisorsSum(num) >= 10 && getDivisorsSum(num) <= 100) {
console.log('+++');
} else {
console.log('---');
}
Sigurisht, është më mirë të kryhet operacioni "i rëndë" një herë dhe rezultati të shkruhet në një variabël, e më pas të përdoret kjo variabël në vendet e nevojshme:
let num = 123456;
let sum = getDivisorsSum(num);
if (sum >= 10 && sum <= 100) {
console.log('+++');
} else {
console.log('---');
}
Optimizoni kodin e paraqitur më poshtë:
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;
}