⊗jsSpOtMm 278 of 294 menu

Optimalisatie van geheugengebruik in JavaScript

Alle gemaakte variabelen worden opgeslagen in het RAM van de computer. Soms kan onnadenkend code schrijven het geheugengebruik sterk laten toenemen.

Laten we een voorbeeld bekijken. Stel we hebben de taak om de som van gehele getallen van 1 tot 100000000 te vinden. Stel we hebben een functie die een array vult met gehele getallen uit een opgegeven bereik:

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

Stel we ook hebben een functie die de som van de elementen van een array vindt:

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

Met een combinatie van deze functies kan de gestelde taak eenvoudig worden opgelost:

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

Het is een elegante oplossing geworden. Er zit echter een probleem in: het verbruikt een enorme hoeveelheid RAM.

Laten we eens rekenen. De functie fillArr maakt een array met 100000000 getallen. Stel dat JavaScript 2 bytes per getal toewijzt - dan is er voor het opslaan van onze array 200000000 byte nodig, dus ongeveer 200 megabyte RAM.

Maar in werkelijkheid is er veel meer RAM nodig vanwege de zeer hoge overhead bij het opslaan van arrays in JavaScript.

Met inzicht in het probleem is het gemakkelijk een functie te maken die de taak oplost en praktisch geen RAM verbruikt:

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

Laten we de taak oplossen met onze functie:

let sum = getNumsSum(100000000);

Een programmeur kreeg de taak om het aantal getallen dat deelbaar is door 7 zonder rest, in een opgegeven interval te vinden. Hij loste het als volgt op:

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

Leg uit wat er mis is met deze code. Pas de code aan naar een meer optimale versie.

Een programmeur kreeg de taak om de som van de delers van een getal te vinden. Hij loste het als volgt op:

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

Leg uit wat er mis is met deze code. Pas de code aan naar een meer optimale versie.

Nederlands
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Wij gebruiken cookies voor de werking van de site, analyse en personalisatie. De verwerking van gegevens gebeurt volgens het Privacybeleid.
alles accepteren aanpassen weigeren