Sunkios operacijos kartojimo optimizavimas JavaScript

Ankstesnėje pamokoje pakartotiniai funkcijų iškvietimai užima labai mažai laiko ir mūsų optimizacija sutaupys nedaug. Tačiau, viskas bus daug blogiau, jei kelis kartus iškviesime "sunkią" funkciją, kuri vykdoma pakankamai ilgai.

Tarkime, pavyzdžiui, kad turime funkciją, kuri randa skaičiaus daliklius:

javascriptfunction getDivisorsSum(num) {
  let res = 0;
  
  for (let i = 1; i <= num; i++) {
    if (num % i === 0) {
      res += i;
    }
  }
  
  return res;
}

Akivaizdu, kad ši funkcija yra pakankamai "sunki". Todėl bloga idėja būtų parašyti tokį kodą:

javascriptlet num = 123456;

if (getDivisorsSum(num) >= 10 && getDivisorsSum(num) <= 100) {
  console.log('+++');
} else {
  console.log('---');
}

Žinoma, geriau atlikti "sunkų" veiksmą vieną kartą ir rezultatą įrašyti į kintamąjį, o tada naudoti tą kintamąjį reikiamose vietose:

javascriptlet num = 123456;
let sum = getDivisorsSum(num);

if (sum >= 10 && sum <= 100) {
  console.log('+++');
} else {
  console.log('---');
}
Задание 1

Optimizuokite žemiau pateiktą kodą:

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