⊗jsSpOtMm 278 of 294 menu

Optimalizácia spotreby pamäte v JavaScripte

Všetky vytvorené premenné sú uložené v operačnej pamäti počítača. Niekedy bezmyšlienkovité písanie kódu môže dramaticky zvýšiť spotrebúvanú pamäť.

Pozrime sa na príklad. Predpokladajme, že našou úlohou je nájsť súčet celých čísel od 1 do 100000000. Predpokladajme, že máme funkciu, ktorá naplní pole celými číslami z daného rozsahu:

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

Predpokladajme, že máme tiež funkciu, ktorá nájde súčet prvkov pola:

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

Pomocou kombinácie týchto funkcií môžeme ľahko vyriešiť zadanú úlohu:

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

Výsledkom je elegantné riešenie. Má však problém: spotrebúva obrovské množstvo operačnej pamäte.

Počítajme. Funkcia fillArr vytvára pole s 100000000 číslami. Predpokladajme, že JavaScript alokuje na číslo 2 bajty - potom na uloženie nášho poľa bude potrebných 200000000 bajtov, čo je približne 200 megabajtov operačnej pamäte.

V skutočnosti bude potrebná oveľa väčšia operačná pamäť kvôli veľkým režijným nákladom pri ukladaní polí v JavaScripte.

Keď pochopíme problém, je ľahké vytvoriť funkciu, ktorá úlohu vyrieši a prakticky nešpotrebúva operačnú pamäť:

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

Vyriešme úlohu pomocou našej funkcie:

let sum = getNumsSum(100000000);

Pred istým programátorom stála úloha nájsť počet čísel deliteľných bezo zvyšku 7, nachádzajúcich sa v zadanom intervale. Vyriešil ju nasledovným spôsobom:

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

Vysvetlite, čo je nesprávne na tomto kóde. Prepíšte kód na optimalizovanejší.

Pred istým programátorom stála úloha nájsť súčet deliteľov čísla. Vyriešil ju nasledovným spôsobom:

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

Vysvetlite, čo je nesprávne na tomto kóde. Prepíšte kód na optimalizovanejší.

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
Používame cookies na fungovanie stránky, analýzu a personalizáciu. Spracúvanie údajov prebieha v súlade s Politikou ochrany osobných údajov.
prijať všetky nastaviť odmietnuť