Pengoptimuman Penggunaan Memori dalam JavaScript

Semua pembolehubah yang dicipta disimpan dalam memori RAM komputer. Kadang-kadang penulisan kod tanpa berfikir boleh meningkatkan penggunaan memori dengan mendadak.

Mari kita lihat sebuah contoh. Katakan kita diberi tugas untuk mencari hasil tambah integer dari 1 hingga 100000000. Katakan kita mempunyai satu fungsi yang mengisi array dengan integer dari julat yang diberikan:

javascriptfunction fillArr(a, b) {
  let res = [];
  
  for (let i = a; i <= b; i++) {
    res.push(i);
  }
  
  return res;
}

Katakan kita juga mempunyai fungsi yang mencari hasil tambah elemen array:

javascriptfunction getSum(arr) {
  let sum = 0;
  
  for (let elem of arr) {
    sum += elem
  }
  
  return sum;
}

Dengan gabungan fungsi-fungsi ini, tugas yang diberikan boleh diselesaikan dengan mudah:

javascriptlet sum = getSum(fillArr(1, 100000000));

Penyelesaiannya menjadi elegan. Namun, terdapat satu masalah: ia menggunakan jumlah memori RAM yang sangat besar.

Mari kita kira. Fungsi fillArr mencipta array dengan 100000000 nombor. Katakan JavaScript memperuntukkan 2 bait untuk setiap nombor - maka untuk menyimpan array kita, diperlukan 200000000 bait, iaitu lebih kurang 200 megabait memori RAM.

Tetapi sebenarnya, lebih banyak memori RAM akan diperlukan kerana dalam JavaScript terdapat perbelanjaan tambahan yang sangat besar ketika menyimpan array.

Dengan memahami masalahnya, adalah mudah untuk mencipta fungsi yang menyelesaikan tugas dan hampir tidak menggunakan memori RAM:

javascriptfunction getNumsSum(max) {
  let sum = 0;
  
  for (let i = 1; i <= max; i++) {
    sum += i;
  }
  
  return sum;
}

Mari selesaikan tugas dengan menggunakan fungsi kita:

javascriptlet sum = getNumsSum(100000000);
Задание 1

Seorang pengaturcara diberi tugas untuk mencari bilangan nombor yang boleh dibahagi tepat dengan 7, berada dalam julat yang diberikan. Dia menyelesaikannya dengan cara berikut:

javascriptlet arr = [];

for (let i = 0; i <= 1000; i++) {
  if (i % 7 == 0) {
    arr.push(i);
  }
}

console.log(arr.length);

Terangkan, apa yang salah dengan kod ini. Ubahsuai kod tersebut kepada versi yang lebih optimum.

Задание 2

Seorang pengaturcara diberi tugas untuk mencari hasil tambah pembahagi suatu nombor. Dia menyelesaikannya dengan cara berikut:

javascriptfunction getDivisors(num) {
  let res = [];
  
  for (let i = 1; i <= num; i++) {
    if (num % i === 0) {
      res.push(i);
    }
  }
  
  return res;
}

function getSum(arr) {
  let sum = 0;
  
  for (let elem of arr) {
    sum += elem
  }
  
  return sum;
}

let sum = getSum(getDivisors(320));
console.log(sum);

Terangkan, apa yang salah dengan kod ini. Ubahsuai kod tersebut kepada versi yang lebih optimum.