⊗jsSpOtMm 278 of 294 menu

Optimering af hukommelsesforbrug i JavaScript

Alle oprettede variable lagres i computerens RAM. Sommetider kan tankeløs kodning pludseligt øge det forbrugte hukommelsesforbrug.

Lad os se på et eksempel. Antag at vores opgave er at finde summen af heltal fra 1 til 100000000. Antag at vi har en funktion, som fylder et array med heltal fra et givet interval:

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

Antag at vi også har en funktion, som finder summen af elementerne i et array:

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

Ved at kombinere disse funktioner kan opgaven let løses:

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

Det blev en elegant løsning. Den har dog et problem: den forbruger enormt megen RAM.

Lad os beregne. Funktionen fillArr opretter et array med 100000000 tal. Antag at JavaScript allokerer 2 bytes per tal - så vil lagring af vores array kræve 200000000 bytes, hvilket er omkring 200 megabyte RAM.

Men i virkeligheden vil det kræve meget mere RAM, fordi JavaScript har meget høje omkostninger ved lagring af arrays.

Ved at forstå problemet er det nemt at lave en funktion, som løser opgaven og praktisk talt ikke forbruger RAM:

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

Lad os løse opgaven med vores funktion:

let sum = getNumsSum(100000000);

En programmør stod overfor opgaven at finde antallet af tal, der er delelige med 7, i et givet interval. Han løste den på følgende måde:

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

Forklar, hvad der er galt med denne kode. Omskriv koden til en mere optimal version.

En programmør stod overfor opgaven at finde summen af divisors i et tal. Han løste den på følgende måde:

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

Forklar, hvad der er galt med denne kode. Omskriv koden til en mere optimal version.

Dansk
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDeutschΕλληνικά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
Vi bruger cookies til webstedets funktion, analyse og personalisering. Behandling af data foregår i henhold til Fortrolighedspolitikken.
accepter alle tilpas afvis