JavaScript-ში მძიმე ოპერაციების განმეორებითი შესრულების ოპტიმიზაცია
წინა გაკვეთილში ფუნქციების განმეორებითი გამოძახებები სინამდვილეში ძალიან ცოტა დროს იღებდა და ჩვენმა ოპტიმიზაციამ არც ისე ბევრი დაზოგა. თუმცა, ყველაფერი ბევრად უარესი იქნება, თუ რამდენიმეჯერ გამოვიძახებთ "მძიმე" ფუნქციას, რომელიც საკმაოდ დიდი ხნის განმავლობაში სრულდება.
მაგალითად, დავუშვათ, გვაქვს ფუნქცია, რომელიც რიცხვის გამყოფებს პოულობს:
javascriptfunction getDivisorsSum(num) {
let res = 0;
for (let i = 1; i <= num; i++) {
if (num % i === 0) {
res += i;
}
}
return res;
}
აშკარაა, რომ ეს ფუნქცია საკმაოდ "მძიმეა". ამიტომ, ცუდი იდეა იქნება ასეთი კოდის დაწერა:
javascriptlet num = 123456;
if (getDivisorsSum(num) >= 10 && getDivisorsSum(num) <= 100) {
console.log('+++');
} else {
console.log('---');
}
რა თქმა უნდა, უკეთესია "მძიმე" ოპერაცია ერთხელ შეასრულოთ და შედეგი ცვლადში ჩაწეროთ, შემდეგ კი გამოიყენოთ ეს ცვლადი საჭირო ადგილებში:
javascriptlet num = 123456;
let sum = getDivisorsSum(num);
if (sum >= 10 && sum <= 100) {
console.log('+++');
} else {
console.log('---');
}
Задание 1
ოპტიმიზაცია გაუკეთეთ ქვემოთ მოცემულ კოდს:
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;
}