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:
javascriptfunction 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:
javascriptlet 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:
javascriptlet num = 123456;
let sum = getDivisorsSum(num);
if (sum >= 10 && sum <= 100) {
console.log('+++');
} else {
console.log('---');
}
Задание 1
Optimer koden nedenfor:
javascriptlet 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;
}