जावास्क्रिप्ट में भारी ऑपरेशनों के दोहराव का ऑप्टिमाइजेशन

पिछले पाठ में फ़ंक्शन के बार-बार कॉल वास्तव में बहुत कम समय लेते हैं और हमारा ऑप्टिमाइजेशन बहुत अधिक बचत नहीं करेगा। हालाँकि, स्थिति तब बहुत खराब हो जाएगी जब हम कई बार एक "भारी" फ़ंक्शन को कॉल करेंगे, जिसे पूरा करने में काफी लंबा समय लगता है।

उदाहरण के लिए, मान लीजिए कि हमारे पास एक फ़ंक्शन है जो संख्या के भाजक ढूंढती है:

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