⊗jsSpOtMm 278 of 294 menu

Optimering av minnesanvändning i JavaScript

Alla skapade variabler lagras i datorns arbetsminne. Ibland kan tanklös kodskrivning kraftigt öka minnesförbrukningen.

Låt oss titta på ett exempel. Anta att vi har uppgiften att hitta summan av heltal från 1 till 100000000. Anta att vi har en funktion som fyller en array med heltal från ett givet intervall:

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

Anta också att vi har en funktion som hittar summan av elementen i en array:

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

Med en kombination av dessa funktioner kan man enkelt lösa den givna uppgiften:

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

Det blev en elegant lösning. Men det finns ett problem med den: den förbrukar enorma mängder arbetsminne.

Låt oss räkna. Funktionen fillArr skapar en array med 100000000 tal. Anta att JavaScript tilldelar 2 byte per tal - då krävs det 200000000 byte för att lagra vår array, det vill säga ungefär 200 megabyte arbetsminne.

Men i verkligheten kommer det att krävas betydligt mer arbetsminne på grund av att JavaScript har mycket stora omkostnader för att lagra arrayer.

Genom att förstå problemet är det lätt att göra en funktion som löser uppgiften och nästan inte förbrukar något arbetsminne:

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

Låt oss lösa uppgiften med vår funktion:

let sum = getNumsSum(100000000);

En programmerare hade uppgiften att hitta antalet tal som är jämnt delbara med 7 inom ett givet intervall. Hen löste det på följande sätt:

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

Förklara vad som är fel med den här koden. Skriv om koden till en mer optimal version.

En programmerare hade uppgiften att hitta summan av delare till ett tal. Hen löste det på följande sätt:

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

Förklara vad som är fel med den här koden. Skriv om koden till en mer optimal version.

Svenska
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Vi använder kakor för webbplatsens funktion, analys och personalisering. Behandling av data sker i enlighet med Integritetspolicyn.
acceptera alla anpassa avvisa