Оптимизација на повторување на тешки операции во JavaScript
Во претходната лекција повторните повикувања на функции всушност заземаат многу малку време и нашата оптимизација нема да заштеди многу. Сепак, сè ќе биде многу полошо ако неколку пати го повикаме "тешката" функција, која се извршува прилично долго време.
Нека, на пример, имаме функција која ги наоѓа делителите на број:
function getDivisorsSum(num) {
let res = 0;
for (let i = 1; i <= num; i++) {
if (num % i === 0) {
res += i;
}
}
return res;
}
Очигледно е дека оваа функција е прилично "тешка". Затоа лоша идеја би било да се напише ваков код:
let num = 123456;
if (getDivisorsSum(num) >= 10 && getDivisorsSum(num) <= 100) {
console.log('+++');
} else {
console.log('---');
}
Подобро е, се разбира, "тешката" операција да се изврши еднаш и резултатот да се запише во променлива, а потоа да се користи таа променлива на потребните места:
let num = 123456;
let sum = getDivisorsSum(num);
if (sum >= 10 && sum <= 100) {
console.log('+++');
} else {
console.log('---');
}
Оптимизирајте го кодот прикажан подолу:
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;
}