⊗jsSpOtMm 278 of 294 menu

Optimering van geheueverbruik in JavaScript

Alle geskape veranderlikes word gestoor in die werksgeheue van die rekenaar. Soms kan onnadenkende kode-skryf die geheueverbruik skerp laat toeneem.

Kom ons kyk na 'n voorbeeld. Gestel ons het die taak om die som van heelgetalle van 1 tot 100000000 te vind. Gestel ons het 'n funksie wat 'n array vul met heelgetalle uit 'n gegewe reeks:

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

Gestel ons het ook 'n funksie wat die som van elemente in 'n array vind:

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

Met die kombinasie van hierdie funksies kan die gestelde taak maklik opgelos word:

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

Dit is 'n elegante oplossing. Daar is egter 'n probleem: dit verbruik 'n enorme hoeveelheid werksgeheue.

Kom ons bereken. Die funksie fillArr skep 'n array met 100000000 getalle. Gestel JavaScript ken 2 grepe toe per getal - dan sal vir die stoor van ons array 200000000 grepe benodig word, dit is ongeveer 200 megagrepe werksgeheue.

Maar in werklikheid sal baie meer werksgeheue benodig word omdat JavaScript baie groot oorhoofse uitgawes het met die stoor van 'n array.

Deur die probleem te verstaan, is dit maklik om 'n funksie te maak wat die probleem oplos en byna geen werksgeheue verbruik nie:

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

Kom ons los die probleem op met ons funksie:

let sum = getNumsSum(100000000);

'n Sekere programmeur het die taak gehad om die aantal getalle te vind, wat sonder res deelbaar is deur 7, wat in 'n gegewe interval is. Hy het dit soos volg opgelos:

let arr = []; for (let i = 0; i <= 1000; i++) { if (i % 7 == 0) { arr.push(i); } } console.log(arr.length);

Verduidelik wat verkeerd is met hierdie kode. Herskep die kode na meer optimale.

'n Sekere programmeur het die taak gehad om die som van delers van 'n getal te vind. Hy het dit soos volg opgelos:

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

Verduidelik wat verkeerd is met hierdie kode. Herskep die kode na meer optimale.

Afrikaans
AzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Ons gebruik koekies vir die werking van die webwerf, ontleding en personalisering. Die verwerking van data geskied volgens die Privaatheidsbeleid.
aanvaar alles instel verwerp