Skip to content

perf: trazer o code splitting para a main (o #38 não chegou lá) - #47

Merged
janeiaraujo merged 2 commits into
mainfrom
perf/code-splitting-para-main
Aug 3, 2026
Merged

perf: trazer o code splitting para a main (o #38 não chegou lá)#47
janeiaraujo merged 2 commits into
mainfrom
perf/code-splitting-para-main

Conversation

@janeiaraujo

Copy link
Copy Markdown
Owner

O que aconteceu

O #38 está marcado como MERGED, mas o código nunca chegou na main.

Ele foi aberto sobre feat/i18n-telas-secundarias para evitar conflito no
App.jsx. A ordem dos merges inverteu o que eu esperava:

  1. feat(i18n): traduzir as 43 telas restantes — i18n completa #37 (feat/i18n-telas-secundariasmain) foi mesclado primeiro
  2. perf: dividir o bundle por rota (−60% na carga inicial) #38 (perf/code-splittingfeat/i18n-telas-secundarias) foi mesclado
    depois — numa branch que já tinha virado beco sem saída

O GitHub mostra os dois como MERGED, e é verdade: o #38 foi mesclado, só que
num destino que não leva mais a lugar nenhum.

Verificado na main antes deste PR:

$ git show origin/main:frontend/src/App.jsx | grep -c "lazy("
0
$ git show origin/main:frontend/src/App.jsx | grep -c "Suspense"
0

Ou seja: a redução de 60% no bundle e a correção do gatilho do CI não estão
em produção
.

Este PR

Cherry-pick dos dois commits órfãos, agora direto sobre a main:

Aplicou limpo (o commit do splitting foi escrito sobre o mesmo App.jsx que
está na main hoje).

Verificação

  • carga inicial: 969 kB / 256 kB gzip (era 2400 kB / 649 kB), 74 chunks
  • frontend npm test → 7 passam · vite build ok
  • backend npm test → 38 passam

Sobre o processo

PR empilhado só é seguro se a ordem de merge for de baixo para cima. Foi má
escolha minha abrir assim sem deixar isso explícito no corpo do #38 — a
observação que coloquei lá dizia que o GitHub re-aponta a base sozinho, o que é
verdade quando o PR de baixo é mergeado primeiro, e eu não sinalizei a
dependência de ordem com clareza suficiente.

Depois de mergear este, dá para apagar feat/i18n-telas-secundarias e
perf/code-splitting: o conteúdo passa a estar todo aqui.

O frontend saia num chunk unico de 2,0 MB (597 kB gzip): quem abria a
tela de login baixava a aplicacao inteira, incluindo o editor TipTap, os
graficos e todas as telas de admin, para ver um formulario com dois
campos. O Vite avisava disso a cada build.

41 rotas passam a entrar por lazy(), com um Suspense em volta. Login e
Register ficam estaticos de proposito: sao o primeiro contato de quem
chega sem sessao, e adiar essas duas trocaria o bundle grande por um
flash de spinner logo na abertura.

Carga inicial: 2400 kB -> 973 kB (649 kB -> 261 kB gzip), ~60% a menos.

Medido no navegador: o login busca 26 chunks e o chunk do editor
(570 kB, TipTap + ProseMirror + highlight.js, compartilhado por KBCreate
e KBEdit) nao esta entre eles. Navegando para /forgot-password, o chunk
proprio da rota e buscado sob demanda e a tela renderiza.
O gatilho tinha filtro 'branches: [main]' no pull_request, entao um PR
empilhado sobre outra branch nao recebia nenhum check - foi o que
aconteceu com este proprio PR, aberto sobre feat/i18n-telas-secundarias
para evitar conflito no App.jsx.

Sem checks, a protecao da main so cobre o PR de baixo da pilha: o de
cima entra sem ninguem ter rodado teste nele.
Copilot AI review requested due to automatic review settings August 3, 2026 22:28

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Este PR traz para a main o code splitting por rota (que tinha sido mesclado em uma branch “beco sem saída”) e ajusta o workflow de CI para que PRs empilhados (base != main) também recebam checks, evitando que mudanças passem sem validação.

Changes:

  • Introduz React.lazy() + Suspense em frontend/src/App.jsx para carregar a maioria das rotas sob demanda.
  • Mantém Login/Register como imports estáticos (primeiro contato sem spinner).
  • Remove o filtro de branch de destino no evento pull_request do workflow .github/workflows/ci.yml para garantir CI em PRs empilhados.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 2 comments.

File Description
frontend/src/App.jsx Aplica code splitting por rota com lazy()/Suspense e fallback de loading.
.github/workflows/ci.yml Garante execução de CI em PRs com base diferente de main (PR empilhado).
Suppressed comments (1)

frontend/src/App.jsx:108

  • PublicRoute tambem replica o spinner; como CarregandoRota() ja existe no arquivo, vale reutilizar para manter comportamento/estilo consistente e evitar codigo duplicado.
};

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread frontend/src/App.jsx
Comment on lines +112 to +113
<Suspense fallback={<CarregandoRota />}>
<Routes>
Comment thread frontend/src/App.jsx
Comment on lines 76 to 78
const ProtectedRoute = ({ children }) => {
const { t } = useTranslation();
const { isAuthenticated, loading } = useAuth();
@janeiaraujo
janeiaraujo merged commit b74bfc8 into main Aug 3, 2026
4 checks passed
@janeiaraujo janeiaraujo mentioned this pull request Aug 3, 2026
@janeiaraujo
janeiaraujo deleted the perf/code-splitting-para-main branch August 3, 2026 23:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants