Optimering af gentagne tunge operationer i JavaScript
I den forrige lektion tog de gentagne funktionskald faktisk meget lidt tid, og vores optimering vil ikke spare ret meget. Men det vil blive meget værre, hvis vi flere gange kalder en "tung" funktion, som tager ret lang tid at udføre.
Lad os for eksempel sige, at vi har en funktion, som finder divisorer for et tal:
function getDivisorsSum(num) {
let res = 0;
for (let i = 1; i <= num; i++) {
if (num % i === 0) {
res += i;
}
}
return res;
}
Det er indlysende, at denne funktion er ret "tung". Derfor er det en dårlig idé at skrive kode som denne:
let num = 123456;
if (getDivisorsSum(num) >= 10 && getDivisorsSum(num) <= 100) {
console.log('+++');
} else {
console.log('---');
}
Det er selvfølgelig bedre at udføre den "tunge" operation én gang og gemme resultatet i en variabel, og derefter bruge denne variabel hvor det er nødvendigt:
let num = 123456;
let sum = getDivisorsSum(num);
if (sum >= 10 && sum <= 100) {
console.log('+++');
} else {
console.log('---');
}
Optimer 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;
}