Hi everyone! I'm the author of code.mu :)
I'd love to chat with my non-Russian audience. I'm looking for your feedback on the site and the translation quality. Let's chat:)
⊗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