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;
}