Optimalisering av gjentakelse av tunge operasjoner i JavaScript
I forrige leksjon tok faktisk gjentatte funksjonskall veldig lite tid, og vår optimalisering ville ikke spart så veldig mye. Imidlertid vil alt være mye verre hvis vi flere ganger kaller en "tung" funksjon som tar ganske lang tid å utføre.
La oss for eksempel si at vi har en funksjon som finner divisorer til et tall:
function getDivisorsSum(num) {
let res = 0;
for (let i = 1; i <= num; i++) {
if (num % i === 0) {
res += i;
}
}
return res;
}
Det er åpenbart at denne funksjonen er ganske "tung". Derfor ville det være en dårlig idé å skrive kode som dette:
let num = 123456;
if (getDivisorsSum(num) >= 10 && getDivisorsSum(num) <= 100) {
console.log('+++');
} else {
console.log('---');
}
Det er selvfølgelig bedre å utføre den "tunge" operasjonen en gang og lagre resultatet i en variabel, og deretter bruke denne variabelen der det trengs:
let num = 123456;
let sum = getDivisorsSum(num);
if (sum >= 10 && sum <= 100) {
console.log('+++');
} else {
console.log('---');
}
Optimaliser koden nedenfor:
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;
}