⊗jsSpOtMm 278 of 294 menu

Optimizacija porabe pomnilnika v JavaScript

Vse ustvarjene spremenljivke so shranjene v delovnem pomnilniku računalnika. Včasih lahko nepremišljeno pisanje kode drastično poveča porabo pomnilnika.

Poglejmo si primer. Predpostavimo, da je naša naloga najti vsoto celih števil od 1 do 100000000. Recimo, da imamo funkcijo, ki zapolni tabelo s celimi števili iz danega obsega:

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

Recimo tudi, da imamo funkcijo, ki najde vsoto elementov tabele:

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

S kombinacijo teh funkcij lahko enostavno rešimo dano nalogo:

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

Rešitev je elegantna. Vendar ima težavo: porabi ogromno količino delovnega pomnilnika.

Izračunajmo. Funkcija fillArr ustvari tabelo z 100000000 števili. Predpostavimo, da JavaScript za število dodeli 2 bajta - potem bo za shranjevanje naše tabele potrebno 200000000 bajtov, kar je približno 200 megabajtov delovnega pomnilnika.

V resnici bo potrebno veliko več delovnega pomnilnika zaradi tega, ker ima JavaScript zelo velike režijske stroške pri shranjevanju tabele.

Če razumemo težavo, lahko enostavno naredimo funkcijo, ki reši nalogo in praktično ne porabi delovnega pomnilnika:

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

Rešimo nalogo z našo funkcijo:

let sum = getNumsSum(100000000);

Nek programer je imel nalogo najti število števil, ki so deljiva brez ostanka z 7 in se nahajajo v danem obsegu. Rešil jo je na naslednji način:

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

Pojasnite, kaj je narobe s to kodo. Predelajte kodo v bolj optimalno.

Nek programer je imel nalogo najti vsoto deliteljev števila. Rešil jo je na naslednji 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);

Pojasnite, kaj je narobe s to kodo. Predelajte kodo v bolj optimalno.

Slovenščina
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Za delovanje spletnega mesta, analitiko in personalizacijo uporabljamo piškotke. Obdelava podatkov poteka v skladu s Politiko zasebnosti.
sprejmi vse nastavi zavrni