⊗jsSpOtMm 278 of 294 menu

Optimalisering av minneforbruk i JavaScript

Alle opprettede variabler lagres i datamaskinens RAM. Noen ganger kan tankeløs kodeskriving øke minneforbruket kraftig.

La oss se på et eksempel. Anta at vi har en oppgave å finne summen av heltall fra 1 til 100000000. Anta at vi har en funksjon som fyller en matrise med heltall fra et gitt område:

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

Anta at vi også har en funksjon som finner summen av elementene i en matrise:

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

Ved å kombinere disse funksjonene kan man enkelt løse den gitte oppgaven:

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

Det ble en elegant løsning. Den har imidlertid et problem: den bruker enormt mengde RAM.

La oss regne på det. Funksjonen fillArr oppretter en matrise med 100000000 tall. Anta at JavaScript tildeler 2 byte per tall - da vil lagring av matrisen vår kreve 200000000 byte, det vil si omtrent 200 megabyte RAM.

Men i virkeligheten vil det kreves mye mer RAM fordi JavaScript har svært høye overheadkostnader ved lagring av matriser.

Når man forstår problemet, er det enkelt å lage en funksjon som løser oppgaven og praktisk talt ikke bruker RAM:

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

La oss løse oppgaven med funksjonen vår:

let sum = getNumsSum(100000000);

En programmerer hadde oppgaven å finne antall tall som er delelige uten rest på 7, innenfor et gitt intervall. Han løste den på følgende måte:

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

Forklar hva som er galt med denne koden. Omgjør koden til en mer optimal en.

En programmerer hadde oppgaven å finne summen av divisorer til et tall. Han løste den på følgende måte:

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 hva som er galt med denne koden. Omgjør koden til en mer optimal en.

Norsk
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Vi bruker informasjonskapsler for nettstedets funksjonalitet, analyse og personalisering. Behandling av data foregår i henhold til Personvernerklæringen.
godta alle tilpass avvis