Raskete operatsioonide kordamise optimeerimine JavaScriptis
Eelmises õppetükis võtsid funktsioonide korduvad väljakutsed tegelikult väga vähe aega ja meie optimeerimine säästis mitte väga palju. Kuid kõik muutub palju hullemaks, kui teeme mitu korda väljakutse "raskele" funktsioonile, mis võtab täitmiseks piisavalt pikka aega.
Oletame näiteks, et meil on funktsioon, mis leiab arvu jagajad:
function getDivisorsSum(num) {
let res = 0;
for (let i = 1; i <= num; i++) {
if (num % i === 0) {
res += i;
}
}
return res;
}
Ilmselgelt on see funktsioon piisavalt "raske". Seetõttu oleks halb idee kirjutada selline kood:
let num = 123456;
if (getDivisorsSum(num) >= 10 && getDivisorsSum(num) <= 100) {
console.log('+++');
} else {
console.log('---');
}
Paremini on muidugi teha "raske" operatsioon üks kord ja kirjutada tulemus muutujasse, siis kasutada seda muutujat vajalikes kohtades:
let num = 123456;
let sum = getDivisorsSum(num);
if (sum >= 10 && sum <= 100) {
console.log('+++');
} else {
console.log('---');
}
Optimeerige allolev kood:
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;
}