Optimering av upprepade tunga operationer i JavaScript
I föregående lektion tar de upprepade funktionsanropen faktiskt väldigt lite tid och vår optimering kommer att spara inte särskilt mycket. Men allt blir mycket värre om vi gör flera anrop av en "tung" funktion som tar ganska lång tid att utföra.
Låt oss till exempel säga att vi har en funktion som hittar delare av ett tal:
function getDivisorsSum(num) {
let res = 0;
for (let i = 1; i <= num; i++) {
if (num % i === 0) {
res += i;
}
}
return res;
}
Det är uppenbart att denna funktion är ganska "tung". Därför är det en dålig idé att skriva kod som ser ut så här:
let num = 123456;
if (getDivisorsSum(num) >= 10 && getDivisorsSum(num) <= 100) {
console.log('+++');
} else {
console.log('---');
}
Det är bättre att, naturligtvis, utföra den "tunga" operationen en gång och spara resultatet i en variabel, och sedan använda den variabeln på de ställen där den behövs:
let num = 123456;
let sum = getDivisorsSum(num);
if (sum >= 10 && sum <= 100) {
console.log('+++');
} else {
console.log('---');
}
Optimera koden nedan:
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;
}