⊗jsSpOtMm 278 of 294 menu

Optimizacija potrošnje memorije u JavaScriptu

Sve kreirane promenljive se čuvaju u radnoj memoriji računara. Ponekad bezumljeno pisanje koda može naglo povećati potrošenu memoriju.

Hajde da pogledamo na primeru. Pretpostavimo da smo dobili zadatak da nađemo zbir celih brojeva od 1 do 100000000. Pretpostavimo da imamo funkciju, koja popunjava niz celim brojevima iz zadatog opsega:

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

Pretpostavimo da takođe imamo funkciju, koja nalazi zbir elemenata niza:

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

Kombinacijom ovih funkcija možemo lako rešiti zadati problem:

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

Dobili smo elegantno rešenje. U njemu, međutim, postoji problem: ono troši ogromnu količinu radne memorije.

Hajde da izračunamo. Funkcija fillArr kreira niz sa 100000000 brojeva. Neka JavaScript za svaki broj alocira 2 bajta - tada će za čuvanje našeg niza biti potrebno 200000000 bajta, što je otprilike 200 megabajta radne memorije.

Ali zapravo će biti potrebno mnogo više radne memorije zbog toga što JavaScript ima veoma velike režijske troškove pri čuvanju niza.

Razumevajući problem, lako je napraviti funkciju, koja rešava zadatak i praktično ne troši radnu memoriju:

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

Rešimo problem pomoću naše funkcije:

let sum = getNumsSum(100000000);

Jedan programer je dobio zadatak da nađe broj brojeva koji su deljivi bez ostatka sa 7, a nalaze se u zadatom intervalu. On ga je rešio na sledeći način:

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

Objasnite šta nije u redu sa ovim kodom. Prepravite kod na optimalniji.

Jedan programer je dobio zadatak da nađe zbir delilaca broja. On ga je rešio na sledeći način:

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

Objasnite šta nije u redu sa ovim kodom. Prepravite kod na optimalniji.

Srpski
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Koristimo kolačiće za rad sajta, analitiku i personalizaciju. Obrada podataka se vrši u skladu sa Politikom privatnosti.
prihvati sve podesi odbij