⊗jsSpOtMm 278 of 294 menu

Otimização de consumo de memória em JavaScript

Todas as variáveis criadas são armazenadas na memória RAM do computador. Às vezes, escrever código sem pensar pode aumentar drasticamente o consumo de memória.

Vamos ver um exemplo. Suponha que temos a tarefa de encontrar a soma dos números inteiros de 1 a 100000000. Suponha que temos uma função que preenche um array com números inteiros de um determinado intervalo:

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

Suponha que também temos uma função que encontra a soma dos elementos de um array:

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

Com a combinação dessas funções podemos resolver facilmente a tarefa proposta:

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

A solução ficou elegante. No entanto, ela tem um problema: consome uma quantidade enorme de memória RAM.

Vamos calcular. A função fillArr cria um array com 100000000 números. Suponha que o JavaScript aloque 2 bytes por número - então, para armazenar nosso array, seriam necessários 200000000 bytes, ou seja, aproximadamente 200 megabytes de memória RAM.

Mas, na realidade, será necessária muito mais memória RAM devido ao fato de que o JavaScript tem um overhead muito grande no armazenamento de arrays.

Compreendendo o problema, é fácil criar uma função que resolve a tarefa e praticamente não consome memória RAM:

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

Vamos resolver a tarefa com a nossa função:

let sum = getNumsSum(100000000);

Um programador tinha a tarefa de encontrar a quantidade de números divisíveis sem resto por 7, situados em um determinado intervalo. Ele resolveu da seguinte forma:

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

Explique o que há de errado com este código. Reescreva o código de forma mais otimizada.

Um programador tinha a tarefa de encontrar a soma dos divisores de um número. Ele resolveu da seguinte forma:

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 o que há de errado com este código. Reescreva o código de forma mais otimizada.

Português
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Nós usamos cookies para o funcionamento do site, análises e personalização. O processamento de dados é realizado de acordo com a Política de Privacidade.
aceitar todas configurar rejeitar