Optimasi Konsumsi Memori di JavaScript
Semua variabel yang dibuat disimpan di dalam memori RAM komputer. Terkadang penulisan kode tanpa pertimbangan dapat secara drastis meningkatkan konsumsi memori.
Mari kita lihat sebuah contoh.
Misalkan kita memiliki tugas untuk mencari
jumlah bilangan bulat dari 1
sampai 100000000.
Misalkan kita memiliki fungsi
yang mengisi array
dengan bilangan bulat dari rentang
yang ditentukan:
function fillArr(a, b) {
let res = [];
for (let i = a; i <= b; i++) {
res.push(i);
}
return res;
}
Misalkan kita juga memiliki fungsi yang mencari jumlah elemen array:
function getSum(arr) {
let sum = 0;
for (let elem of arr) {
sum += elem
}
return sum;
}
Dengan kombinasi fungsi-fungsi ini kita dapat dengan mudah menyelesaikan tugas yang diberikan:
let sum = getSum(fillArr(1, 100000000));
Solusinya menjadi elegan. Namun, di dalamnya ada masalah: solusi itu mengonsumsi jumlah memori RAM yang sangat besar.
Mari kita hitung. Fungsi fillArr
membuat array dengan 100000000 angka.
Misalkan JavaScript mengalokasikan 2 byte
untuk satu angka - maka untuk menyimpan array kita diperlukan
200000000 byte, yaitu sekitar
200 megabyte memori RAM.
Namun sebenarnya, memori RAM yang dibutuhkan akan jauh lebih besar karena dalam JavaScript ada overhead yang sangat besar saat menyimpan array.
Dengan memahami masalahnya, mudah untuk membuat fungsi yang menyelesaikan tugas dan hampir tidak mengonsumsi memori RAM:
function getNumsSum(max) {
let sum = 0;
for (let i = 1; i <= max; i++) {
sum += i;
}
return sum;
}
Mari selesaikan tugas dengan fungsi kita:
let sum = getNumsSum(100000000);
Seorang programmer memiliki tugas untuk mencari
jumlah angka yang habis dibagi
7, berada dalam rentang
yang ditentukan. Dia menyelesaikannya dengan cara berikut:
let arr = [];
for (let i = 0; i <= 1000; i++) {
if (i % 7 == 0) {
arr.push(i);
}
}
console.log(arr.length);
Jelaskan, apa yang salah dengan kode ini. Ubahlah kode menjadi lebih optimal.
Seorang programmer memiliki tugas untuk mencari jumlah pembagi suatu angka. Dia menyelesaikannya dengan cara berikut:
function 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);
Jelaskan, apa yang salah dengan kode ini. Ubahlah kode menjadi lebih optimal.