Code Splitting

· Padrão Frontend
Juan Kalleo
Juan Kalleo
Senior Fullstack
This page hasn't been translated to English yet — showing the original Portuguese content.

Divisão do código da aplicação em pedaços menores (bundles) carregados sob demanda, acelerando o carregamento inicial da página. Em vez de mandar pro navegador um único arquivo JavaScript com tudo, o bundler quebra em pedaços (chunks) que só são baixados quando aquela parte da tela é realmente necessária.

No padrão frontend

Next.js já faz code splitting automático por rota — cada página só carrega o que a própria rota importa, sem configuração manual. Isso já mantém dependências pesadas (como echarts, usado só nas telas de relatório) fora do bundle de todo o resto do app.

Pra dentro de uma mesma rota, o padrão é usar next/dynamic em qualquer componente client-only, pesado e condicional — que só aparece atrás de uma interação, não no primeiro paint da tela. Exemplo real: o modal de recorte de imagem (shared/ui/sistema/image-cropper-modal.tsx, que empacota a lib react-easy-crop) só é usado quando alguém escolhe um arquivo em Identidade institucional. Em vez de importar estático, o formulário importa o modal assim:

import dynamic from "next/dynamic";

const ImageCropperModal = dynamic(
  () => import("@/shared/ui/sistema/image-cropper-modal").then((modulo) => modulo.ImageCropperModal),
  { ssr: false },
);

ssr: false porque esse componente só faz sentido no navegador (usa document.body/createPortal, URL.createObjectURL) — sem isso o Next tentaria renderizá-lo no servidor à toa. O import aponta pro arquivo direto (não pelo barrel compartilhado @/shared/ui), pra garantir que o bundler consiga isolar esse chunk de verdade.

Componente sempre visível na tela não entra nesse padrão — só adicionaria uma etapa de carregamento sem necessidade. next/dynamic é reservado pra quando a condição "só aparece atrás de uma interação" é real.