Optimierung der Wiederholung aufwändiger Operationen in JavaScript
Im vorherigen Unterricht nehmen die wiederholten Funktionsaufrufe tatsächlich sehr wenig Zeit in Anspruch und unsere Optimierung würde nicht sehr viel einsparen. Allerdings wird alles viel schlimmer, wenn wir mehrere Male eine "schwere" Funktion aufrufen, die relativ lange Ausführungszeit benötigt.
Nehmen wir zum Beispiel an, wir haben eine Funktion, die die Teiler einer Zahl findet:
function getDivisorsSum(num) {
let res = 0;
for (let i = 1; i <= num; i++) {
if (num % i === 0) {
res += i;
}
}
return res;
}
Offensichtlich ist diese Funktion recht "schwer". Daher wäre es eine schlechte Idee, einen Code wie diesen zu schreiben:
let num = 123456;
if (getDivisorsSum(num) >= 10 && getDivisorsSum(num) <= 100) {
console.log('+++');
} else {
console.log('---');
}
Besser ist es natürlich, die "schwere" Operation einmal auszuführen, das Ergebnis in einer Variable zu speichern und diese Variable dann an den benötigten Stellen zu verwenden:
let num = 123456;
let sum = getDivisorsSum(num);
if (sum >= 10 && sum <= 100) {
console.log('+++');
} else {
console.log('---');
}
Optimieren Sie den untenstehenden 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;
}