⊗jsSpOtMm 278 of 294 menu

Optimización del consumo de memoria en JavaScript

Todas las variables creadas se almacenan en la memoria RAM de la computadora. A veces, escribir código sin pensar puede aumentar drásticamente el consumo de memoria.

Veamos un ejemplo. Supongamos que tenemos la tarea de encontrar la suma de números enteros desde 1 hasta 100000000. Supongamos que tenemos una función que llena un array con números enteros de un rango dado:

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

Supongamos también que tenemos una función que encuentra la suma de los elementos de un array:

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

Usando la combinación de estas funciones podemos resolver fácilmente la tarea planteada:

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

Resultó una solución elegante. Sin embargo, en ella hay un problema: consume una enorme cantidad de memoria RAM.

Hagamos un cálculo. La función fillArr crea un array con 100000000 números. Supongamos que JavaScript asigna 2 bytes por número - entonces para almacenar nuestro array se necesitarán 200000000 bytes, es decir, aproximadamente 200 megabytes de memoria RAM.

Pero en realidad, se necesitará mucha más memoria RAM debido a que en JavaScript hay grandes gastos generales al almacenar un array.

Entendiendo el problema, es fácil hacer una función que resuelva la tarea y que prácticamente no consuma memoria RAM:

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

Resolvamos la tarea usando nuestra función:

let sum = getNumsSum(100000000);

Un programador tenía la tarea de encontrar la cantidad de números divisibles sin resto por 7, ubicados en un intervalo dado. La resolvió de la siguiente manera:

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

Explique qué está mal con este código. Modifique el código a uno más óptimo.

Un programador tenía la tarea de encontrar la suma de los divisores de un número. La resolvió de la siguiente manera:

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

Explique qué está mal con este código. Modifique el código a uno más óptimo.

Español
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Usamos cookies para el funcionamiento del sitio, análisis y personalización. El procesamiento de datos se realiza de acuerdo con la Política de privacidad.
aceptar todas configurar rechazar