← Voltar ao Tech Radar

Next.js 15 (App Router + RSC)

Anel: AdoptQuadrante: Linguagens e frameworks

O meu veredicto

Escolha padrão para frontends headless com muita aplicação. RSC estável após 18 meses em produção.

Briefing do profissional

Porque o adotámos

Lançámos quatro app shells de clientes em Next.js 15 entre novembro de 2025 e abril de 2026. O TTFB numa rota de dashboard personalizado servida por streaming de RSC com PPR (Partial Prerendering, RFC vercel/next.js#54647, de Sebastian Markbåge e Andrew Clark): a shell renderiza aos 240 ms enquanto o slot personalizado chega por streaming em menos de 800 ms. A mesma vista na aplicação anterior do cliente, em pages router, era um muro de 1,6s de TTFB à espera de um único getServerSideProps. Os tempos de build passaram de 9 min para 6 min assim que o Turbopack estabilizou no next build (15.2). O bundle do dashboard de comerciante caiu de 410 KB gzipped para 230 KB depois de RSC com 'use client' seletivo.

Quando recorremos a ele

Briefings com forma de aplicação: dashboards autenticados, checkout em vários passos, portais B2B com UI baseada em papéis, listagens de comércio personalizadas que precisam de slots em streaming acima da dobra. As superfícies editoriais vão para o Astro 5. O streaming de RSC prejudica quando os payloads são pequenos, quando um upstream lento anula o ganho ou quando a equipa coloca 'use client' ao nível do layout.

Caminho de migração

A partir do pages router do Next.js 14, a migração é um projeto a sério, não uma mudança de flag. O codemod do Lee Robinson (@next/codemod app-dir) trata da estrutura de ficheiros, mas não consegue raciocinar sobre a forma da obtenção de dados; o trabalho que sobra é dividir componentes em camadas de servidor e de cliente e identificar que contextos vivem abaixo de uma fronteira 'use client'. Conte com duas semanas de engenharia para uma aplicação de 40 rotas, três com carrinho ou contexto de autenticação partilhados. A partir do Remix v2 a mudança é mais difícil do que se espera: loaders e actions são um modelo mental diferente de RSC com server actions. O que não transita: stores Redux só de cliente, getInitialProps, a maior parte do middleware de pages router.

Duas cicatrizes de produção

Primeira, o streaming de RSC com Tailwind v4 e o edge runtime quebrou a geração dinâmica de classes num portal B2B em fevereiro de 2026. O scanner JIT do Tailwind corre antes de o server component renderizar, por isso as classes interpoladas dentro de payloads RSC ficam invisíveis. Correção: declarar as permutações antecipadamente na safelist do tailwind.config.mjs. Segunda, as server actions com o adaptador Cloudflare do OpenNext foram invocadas duas vezes durante uma retentativa de checkout: um utilizador tocou em Pagar duas vezes em 800 ms e cobrámos o cartão duas vezes. A correção saiu no OpenNext 3.4 (sst/opennext PR #492); acrescentámos um cookie com chave de idempotência para que builds mais antigos do adaptador também não façam nada.

O que estamos a observar

O Partial Prerendering em GA no Next.js 15.5 permite-nos deixar de manter duas estratégias de render na mesma rota (vercel/next.js#54647). O useOptimistic do React 19.1 e os resultados tipados das server actions simplificam o caminho de atualização do carrinho. Estamos também a acompanhar a API after() para trabalho pós-resposta e o progresso do OpenNext na paridade com os Workers para ISR (sst/opennext milestone 4.0).

Adicionado: 2026-04-26 · Última revisão: 2026-04-26

Leitura adicional