Quão grande um arquivo JSON um navegador consegue tratar
Resumo: Não há limite fixo; a restrição é o orçamento de memória da sua aba. Um arquivo de 20MB normalmente vira 60–100MB após a análise, e o DOM destacado pode dobrar isso de novo.

Resumo da ópera: não há teto fixo — estime pela memória, já que o objeto analisado normalmente custa 3–5 vezes o tamanho do texto e o DOM com realce dobra isso de novo; acima de 50MB, ou quando a contagem de registros de nível superior chega às centenas de milhares, fatie, faça streaming ou mude para um app local em vez de forçar em uma aba.
Para onde vai a memória
Um texto JSON de 20MB existe três vezes:
- A string crua: 20MB
- O grafo de objetos analisado: normalmente 60–100MB (strings duplicadas, cabeçalhos de objeto, tabelas hash)
- O DOM com realce: um nó por token, facilmente outro 2x
Buffers do editor, pilhas de desfazer e caches de realce de sintaxe são extras. Um "arquivo de 20MB" pode passar de 200MB residentes.
Regras gerais
| Tamanho | Desktop | Mobile |
|---|---|---|
| < 5MB | Fluido | Fluido |
| 5–20MB | Leve atraso, 1–3s para formatar | Atraso perceptível, pode congelar |
| 20–50MB | Viável mas pesado; desligue o realce | Provável crash |
| > 50MB | Não recomendado | Inutilizável |
Esses números variam com dispositivo, versão do navegador e se o realce está ligado. Use-os para ordens de magnitude, não como garantias.
Por que mais RAM não resolve
Abas têm um limite rígido, e excedê-lo significa um crash imediato em vez de degradação graciosa. No mobile é ainda mais estrito, reivindicando memória na casa das centenas baixas de megabytes.
Trabalhando com arquivos grandes
Fatie.
head -c 1048576 big.json | jq .
jq '.items[0:100]' big.json
Faça streaming. stream-json, ijson, jq --stream processam registro por registro com memória independente do tamanho do arquivo.
Use um app local. Sem limites de aba, memória total da máquina: download do desktop.
Mude o formato. Logs e fluxos de eventos deveriam ser NDJSON desde o início — um registro por linha, transmitível por construção.
Peça ao backend para enxugar. Se a interface precisa de três campos, enviar trezentos é um problema de projeto de API, não uma limitação do navegador.
Dimensionando seu arquivo
ls -lh data.json
jq 'length' data.json
Se length está na casa das centenas de milhares, paginação ou streaming é a resposta, independentemente do tamanho em bytes.
Perguntas frequentes
Como sei em qual faixa de tamanho meu arquivo cai?
Verifique os bytes com ls -lh e a contagem de registros de nível superior com jq 'length'. Arquivos de alguns megabytes são fluidos em toda parte, 20–50MB funciona em desktop mas engasga, e acima de 50MB você deve fazer streaming ou usar uma ferramenta de linha de comando.
O que devo fazer com um arquivo acima de 50MB?
Fatie-o com head -c, ou faça streaming com jq, stream-json ou jq --stream para que a memória fique independente do tamanho do arquivo. Se precisar inspecionar o documento inteiro, use o app desktop, que não é limitado pelo orçamento de memória de uma aba. Logs e fluxos de eventos pertencem ao NDJSON de qualquer forma.