⊗jsSpOtMm 278 of 294 menu

Mälutarbimise optimeerimine JavaScriptis

Kõik loodud muutujad salvestatakse arvuti operatiivmällu. Mõnikord võib mõtlematu koodi kirjutamine järsult suurendada mälutarbimist.

Vaatame näidet. Oletame, et meie ees on ülesanne leida täisarvude summa vahemikus 1 kuni 100000000. Oletame, et meil on funktsioon, mis täidab massiivi täisarvudega antud vahemikust:

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

Oletame, et meil on ka funktsioon, mis leiab massiivi elementide summa:

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

Nende funktsioonide kombinatsiooniga saab antud ülesannet kergesti lahendada:

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

Saime elegantse lahenduse. Selles on siiski probleem: see tarbib tohutut operatiivmälu.

Arvutame. Funktsioon fillArr loob massiivi 100000000 arvuga. Oletame, et JavaScript eraldab arvu kohta 2 baiti - siis meie massiivi hoidmiseks kulub 200000000 baiti, see tähendab umbes 200 megabaiti operatiivmälu.

Tegelikult kulub operatiivmälu palju rohkem, kuna JavaScriptis on massiivi hoidmisel väga suured üldkulud.

Probleemist aru saades on lihtne teha funktsioon, mis lahendab ülesande ja praktiliselt ei tarbi operatiivmälu:

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

Lahendame ülesande meie funktsiooni abil:

let sum = getNumsSum(100000000);

Ühe programmeerija ees seisis ülesanne leida arvude hulk, mis jaguvad jäägita 7-ga, asuvad antud vahemikus. Ta lahendas selle järgmisel viisil:

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

Selgitage, mis selle koodiga valesti on. Muutke koodi optimaalsemaks.

Ühe programmeerija ees seisis ülesanne leida arvu jagajate summa. Ta lahendas selle järgmisel viisil:

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

Selgitage, mis selle koodiga valesti on. Muutke koodi optimaalsemaks.

Eesti
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Me kasutame saidi toimimiseks, analüüsi ja personaliseerimiseks küpsiseid. Andmete töötlemine toimub vastavalt Privaatsuspoliitikale.
nõustu kõigega häälesta keeldu