⊗jsSpOtMm 278 of 294 menu

Memóriafogyasztás optimalizálása JavaScriptben

Minden létrehozott változó a számítógép operatív memóriájában tárolódik. Néha a meggondolatlan kódírás jelentősen megnövelheti a memóriafogyasztást.

Nézzünk egy példát. Tegyük fel, hogy az a feladatunk, hogy megkeressük az egész számok összegét 1-től 100000000-ig. Tegyük fel, hogy van egy függvényünk, ami tölt egy tömböt egész számokkal egy adott tartományból:

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

Tegyük fel, hogy van egy függvényünk, ami megkeresi egy tömb elemeinek összegét:

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

Ezen függvények kombinálásával könnyen megoldható a feladat:

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

Elegáns megoldás született. Van azonban benne egy probléma: hatalmas mennyiségű operatív memóriát fogyaszt.

Számoljunk. A fillArr függvény létrehoz egy tömböt 100000000 számmal. Tegyük fel, hogy a JavaScript 2 bájtot foglal le egy számnak - ekkor a tömbünk tárolásához 200000000 bájt, azaz nagyjából 200 megabájt operatív memória kell.

De valójában jóval több operatív memóriára lesz szükség amiatt, mert a JavaScriptben nagyon nagyok az overhead költségek egy tömb tárolásakor.

A probléma megértése után könnyű készíteni egy függvényt, ami megoldja a feladatot és gyakorlatilag nem fogyaszt operatív memóriát:

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

Oldjuk meg a feladatot a függvényünkkel:

let sum = getNumsSum(100000000);

Egy programozónak az volt a feladata, hogy megkeresse a maradék nélkül 7-tel osztható számok mennyiségét egy adott intervallumban. A következő módon oldotta meg:

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

Magyarázza el, mi a probléma ezzel a kóddal. Írja át a kódot optimalizáltabb verzióra.

Egy programozónak az volt a feladata, hogy megkeresse egy szám osztóinak összegét. A következő módon oldotta meg:

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

Magyarázza el, mi a probléma ezzel a kóddal. Írja át a kódot optimalizáltabb verzióra.

Magyar
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
A weboldal működéséhez, elemzéshez és személyre szabáshoz sütiket használunk. Az adatfeldolgozás a Adatvédelmi irányelvek szerint történik.
összes elfogadása beállítás elutasítás