Uboreshaji wa Matumizi ya Kumbukumbu katika JavaScript
Vigezo vyote vilivyoundwa huhifadhiwa katika kumbukumbu ya kufanya kazi ya kompyuta. Wakati mwingine uandishi wa koda bila kufikiria unaweza kuongeza kwa kasi kumbukumbu inayotumiwa.
Wacha tuangalie kwa mfano.
Hebu tuchukulie tuna lengo la kupata
jumla ya nambari kamili kutoka 1
hadi 100000000.
Hebu tuchukulie tuna kazi,
ambayo inajaza safu
kwa nambari kamili kutoka kwa upeo
uliopewa:
function fillArr(a, b) {
let res = [];
for (let i = a; i <= b; i++) {
res.push(i);
}
return res;
}
Hebu tuchukulie pia tuna kazi, ambayo inapata jumla ya vipengele vya safu:
function getSum(arr) {
let sum = 0;
for (let elem of arr) {
sum += elem
}
return sum;
}
Kwa kutumia mchanganyiko wa kazi hizi inawezekana kutatua kwa urahisi lengo lililowekwa:
let sum = getSum(fillArr(1, 100000000));
Imekuwa suluhisho la kifahari. Hata hivyo, kuna tatizo: linatumia kiwango kikubwa sana cha kumbukumbu ya kufanya kaji.
Wacha tuhesabu. Kazi fillArr
inaunda safu yenye 100000000 nambari.
Hebu tuchukulie JavaScript inatenga 2 baiti
kwa kila nambari
- basi kuhifadhi safu yetu itahitaji
200000000 baiti, yaani takriban
200 megabaiti za kumbukumbu ya kufanya kazi.
Lakini kwa kweli kumbukumbu ya kufanya kaji itahitajika zaidi kutokana na ukweli kwamba katika JavaScript kuna gharama kubwa za ziada wakati wa kuhifadhi safu.
Kwa kuelewa tatizo, ni rahisi kutengeneza kazi, inayotatua tatizo na inayotumia karibu hakuna kumbukumbu ya kufanya kazi:
function getNumsSum(max) {
let sum = 0;
for (let i = 1; i <= max; i++) {
sum += i;
}
return sum;
}
Wacha tutatue tatizo kwa kutumia kazi yetu:
let sum = getNumsSum(100000000);
Mbele ya programu fulani kulikuwa na lengo la kupata
idadi ya nambari, zinazogawanyika bila salio kwa
7, zilizoko kwenye
muda uliopewa. Aliitatua kama ifuatavyo:
let arr = [];
for (let i = 0; i <= 1000; i++) {
if (i % 7 == 0) {
arr.push(i);
}
}
console.log(arr.length);
Elezeni, nini kibaya na kodi hii. Badilisha kodi kuwa bora zaidi.
Mbele ya programu fulani kulikuwa na lengo la kupata jumla ya vigawanyiko vya nambari. Aliitatua kama ifuatavyo:
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);
Elezeni, nini kibaya na kodi hii. Badilisha kodi kuwa bora zaidi.