⊗jsSpOtMm 278 of 294 menu

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.

Kiswahili
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Tunatumia kuki kwa ajili ya uendeshaji wa tovuti, uchambuzi na ubinafsishaji. Usindikaji wa data unafanyika kulingana na Sera ya Faragha.
kubali yote sanidi kataa