Capítulo 55 de 456
Estratégias para diagnosticar e reduzir consumo de memória do Next.js em desenvolvimento e build de produção, cobrindo desde redução de dependências até flags experimentais e desabilitação de features que consomem memória.
experimental.webpackMemoryOptimizations: (desde v15.0.0) reduz uso máximo de memória no Webpack, com leve aumento no tempo de compilação; considerado low-risk apesar de experimental.next build --experimental-debug-memory-usage: (desde 14.2.0) imprime heap usage e estatísticas de garbage collection durante o build, tira heap snapshots automaticamente perto do limite configurado; incompatível com Webpack build worker.--heap-prof: flag do Node.js para gravar um heap profile (node --heap-prof node_modules/next/dist/bin/next build), analisável no Chrome DevTools.NODE_OPTIONS=--inspect: expõe o inspector agent do Node para conectar Chrome DevTools e tirar snapshot do heap; --inspect-brk pausa antes do código do usuário rodar.SIGUSR2: sinal que, durante --experimental-debug-memory-usage, força uma heap snapshot a qualquer momento; snapshot salva na raiz do projeto.experimental.webpackBuildWorker: true).typescript.ignoreBuildErrors: pula o typechecking no build (economiza memória em projetos grandes), mas arrisca deploys com erros de tipo não detectados.productionBrowserSourceMaps: false, experimental.serverSourceMaps: false, e enablePrerenderSourceMaps: false reduzem memória consumida gerando source maps.experimental.preloadEntriesOnStart: por padrão, o servidor pré-carrega os módulos JS de cada página na memória ao iniciar (resposta mais rápida, footprint inicial maior); setar false desativa isso, mas o footprint final tende a igualar se todas as páginas forem requisitadas eventualmente (módulos não são descarregados).node --heap-prof node_modules/next/dist/bin/next build
.heapprofile para análise de memory leak no Chrome DevTools.// next.config.mjs — desabilitar webpack cache em produção
const nextConfig = {
webpack: (config, { dev }) => {
if (config.cache && !dev) {
config.cache = Object.freeze({ type: 'memory' })
}
return config
},
}
export default nextConfig
// next.config.mjs — pular typecheck no build (arriscado)
const nextConfig = {
typescript: {
ignoreBuildErrors: true,
},
}
export default nextConfig
// next.config.ts — desabilitar preload de entries no start
import type { NextConfig } from 'next'
const config: NextConfig = {
experimental: {
preloadEntriesOnStart: false,
},
}
export default config
ignoreBuildErrors: true sem CI que rode typecheck separadamente: deploys podem quebrar em produção com erros de tipo não detectados.--experimental-debug-memory-usage com Webpack build worker ativo: incompatibilidade conhecida, os dois não funcionam juntos.experimental.webpackMemoryOptimizations é a opção mais simples e de baixo risco para começar.--heap-prof ou NODE_OPTIONS=--inspect com Chrome DevTools.preloadEntriesOnStart: false só adia o custo de memória, não o elimina definitivamente.