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