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