⊗jsSpOtMm 278 of 294 menu

Ottimizzazione dell'utilizzo della memoria in JavaScript

Tutte le variabili create vengono memorizzate nella memoria RAM del computer. A volte scrivere codice senza pensare può aumentare drasticamente la memoria utilizzata.

Diamo un'occhiata a un esempio. Supponiamo di avere il compito di trovare la somma dei numeri interi da 1 a 100000000. Supponiamo di avere una funzione che riempie un array con numeri interi in un dato intervallo:

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

Supponiamo di avere anche una funzione che calcola la somma degli elementi dell'array:

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

Combinando queste funzioni si può facilmente risolvere il compito assegnato:

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

Ne risulta una soluzione elegante. Tuttavia, ha un problema: consuma un'enorme quantità di memoria RAM.

Facciamo due calcoli. La funzione fillArr crea un array con 100000000 numeri. Supponendo che JavaScript allochi 2 byte per numero - allora per memorizzare il nostro array sarebbero necessari 200000000 byte, cioè circa 200 megabyte di memoria RAM.

Ma in realtà sarà necessaria molta più memoria RAM a causa degli altissimi costi generali per la memorizzazione degli array in JavaScript.

Comprendendo il problema, è facile creare una funzione che risolva il compito e consumi praticamente zero memoria RAM:

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

Risolviamo il problema utilizzando la nostra funzione:

let sum = getNumsSum(100000000);

Un programmatore aveva il compito di trovare il numero di numeri divisibili senza resto per 7, in un dato intervallo. Lo ha risolto nel modo seguente:

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

Spiegate cosa non va in questo codice. Riscrivete il codice in modo più ottimale.

Un programmatore aveva il compito di trovare la somma dei divisori di un numero. Lo ha risolto nel modo seguente:

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

Spiegate cosa non va in questo codice. Riscrivete il codice in modo più ottimale.

Italiano
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesia日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Utilizziamo i cookie per il funzionamento del sito, l'analisi e la personalizzazione. I dati vengono elaborati in conformità con la Politica sulla privacy.
accetta tutto personalizza rifiuta