⊗jsSpOtMm 278 of 294 menu

Optimizarea consumului de memorie în JavaScript

Toate variabilele create sunt stocate în memoria operativă a computerului. Uneori, scrierea codului fără gândire poate crește brusc memoria consumată.

Să ne uităm la un exemplu. Să presupunem că avem sarcina de a găsi suma numerelor întregi de la 1 la 100000000. Să presupunem că avem o funcție, care umple un array cu numere întregi dintr-un interval dat:

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

Să presupunem că avem și o funcție, care găsește suma elementelor array-ului:

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

Cu o combinație a acestor funcții se poate rezolva cu ușurință sarcina:

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

S-a obținut o soluție elegantă. În ea, totuși, există o problemă: consumă o cantitate imensă de memorie operativă.

Să calculăm. Funcția fillArr creează un array cu 100000000 numere. Să presupunem că JavaScript alocă pentru un număr 2 biți - atunci pentru stocarea array-ului nostru va fi necesar 200000000 de biți, adică aproximativ 200 de megabiți de memorie operativă.

Dar, de fapt, va fi necesară mult mai multă memorie operativă datorită faptului că în JavaScript există foarte mari cheltuieli generale la stocarea array-ului.

Înțelegând problema, este ușor să facem o funcție, care rezolvă sarcina și care consumă practic deloc memorie operativă:

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

Să rezolvăm sarcina cu funcția noastră:

let sum = getNumsSum(100000000);

Unui programator i s-a dat sarcina să găsească numărul de numere divizibile fără rest la 7, aflate într-un interval dat. El a rezolvat-o în felul următor:

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

Explicați ce nu este în regulă cu acest cod. Rescrieți codul într-o variantă mai optimă.

Unui programator i s-a dat sarcina să găsească suma divizorilor unui număr. El a rezolvat-o în felul următor:

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

Explicați ce nu este în regulă cu acest cod. Rescrieți codul într-o variantă mai optimă.

Română
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Folosim cookie pentru funcționarea site-ului, analiză și personalizare. Prelucrarea datelor are loc în conformitate cu Politica de confidențialitate.
acceptă toate configurează respinge