Code Splitting
Dividir o bundle JS em chunks menores, carregados sob demanda.
Sem code splitting: todo JS da app é baixado no primeiro load. Com splitting: cada rota/feature tem seu chunk. Browser baixa só o necessário. React.lazy + import() dinâmico implementa no client. Next.js App Router faz por rota automaticamente.
Rotas secundárias pesadas. Componentes raramente usados (editores, modais complexos, charts). Qualquer feature que não é necessária no primeiro render.
Componentes pequenos e leves — overhead do chunk não vale. Componentes críticos para o first render (above the fold).
Cache de resultado para inputs iguais. Evita recomputação e re-renders desnecessários.
Atrasa execução de uma função até parar de ser chamada por N ms.
Renderiza apenas os itens visíveis. DOM permanece pequeno independente do total.