Optymalizacja powtarzania ciężkich operacji w JavaScript
W poprzedniej lekcji powtórne wywołania funkcji faktycznie zajmują bardzo mało czasu i nasza optymalizacja zaoszczędzi nie bardzo wiele. Jednakże, wszystko będzie znacznie gorzej, jeśli będziemy kilka razy wykonywać wywołanie "ciężkiej" funkcji, która wykonuje się dość długo.
Załóżmy, na przykład, że mamy funkcję, która znajduje dzielniki liczby:
function getDivisorsSum(num) {
let res = 0;
for (let i = 1; i <= num; i++) {
if (num % i === 0) {
res += i;
}
}
return res;
}
Oczywiście, ta funkcja jest dość "ciężka". Dlatego złym pomysłem byłoby napisanie takiego kodu:
let num = 123456;
if (getDivisorsSum(num) >= 10 && getDivisorsSum(num) <= 100) {
console.log('+++');
} else {
console.log('---');
}
Lepiej, oczywiście, wykonać "ciężką" operację raz i wynik zapisać w zmiennej, a potem używać tej zmiennej w potrzebnych miejscach:
let num = 123456;
let sum = getDivisorsSum(num);
if (sum >= 10 && sum <= 100) {
console.log('+++');
} else {
console.log('---');
}
Zoptymalizuj poniższy kod:
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;
}