Optimalisatie van het herhalen van zware operaties in JavaScript
In de vorige les namen herhaalde functieaanroepen eigenlijk heel weinig tijd in beslag en onze optimalisatie zou niet erg veel besparen. Echter, het wordt veel erger als we meerdere keren een "zware" functie aanroepen, die een behoorlijke tijd nodig heeft om uit te voeren.
Stel, we hebben bijvoorbeeld een functie die delers van een getal vindt:
function getDivisorsSum(num) {
let res = 0;
for (let i = 1; i <= num; i++) {
if (num % i === 0) {
res += i;
}
}
return res;
}
Het is duidelijk dat deze functie behoorlijk "zwaar" is. Daarom is het een slecht idee om code zoals deze te schrijven:
let num = 123456;
if (getDivisorsSum(num) >= 10 && getDivisorsSum(num) <= 100) {
console.log('+++');
} else {
console.log('---');
}
Het is beter om de "zware" operatie eenmaal uit te voeren en het resultaat op te slaan in een variabele, en dan deze variabele te gebruiken waar nodig:
let num = 123456;
let sum = getDivisorsSum(num);
if (sum >= 10 && sum <= 100) {
console.log('+++');
} else {
console.log('---');
}
Optimaliseer de onderstaande code:
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;
}