{"id":37,"date":"2026-10-23T17:47:59","date_gmt":"2026-10-23T17:47:59","guid":{"rendered":"https:\/\/news.webgoncalves.online\/?p=37"},"modified":"2026-10-23T17:47:59","modified_gmt":"2026-10-23T17:47:59","slug":"next-js-16-4-cache-components-e-o-novo-modelo-de-cache","status":"publish","type":"post","link":"https:\/\/news.webgoncalves.online\/?p=37","title":{"rendered":"Next.js 16.4: Cache Components e o novo modelo de cache"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><strong>INTRODU\u00c7\u00c3O<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">O Next.js 16.4 foi lan\u00e7ado em 6 de outubro de 2026 com uma das mudan\u00e7as mais significativas desde a introdu\u00e7\u00e3o do App Router: o modelo Cache Components deixa de ser experimental e passa a ser a recomenda\u00e7\u00e3o oficial para todos os apps Next.js. Mais do que uma atualiza\u00e7\u00e3o incremental, essa vers\u00e3o representa a consolida\u00e7\u00e3o de um novo paradigma de desenvolvimento \u2014 um que promete endere\u00e7ar de vez as principais reclama\u00e7\u00f5es sobre caching no App Router.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Al\u00e9m dos Cache Components, o Next.js 16.4 traz melhorias expressivas no Turbopack, o compilador nativo do framework, al\u00e9m de integrar o React 19.3 \u2014 que estabiliza View Transitions e traz a nova browser() API. Para devs que trabalham diariamente com App Router, essa vers\u00e3o merece aten\u00e7\u00e3o especial.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>CACHE COMPONENTS: O NOVO PADR\u00c3O RECOMENDADO<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Cache Components \u00e9 um conjunto de features que permite anotar partes espec\u00edficas da \u00e1rvore de componentes como eleg\u00edveis para caching. A diretiva principal \u00e9 o &#8216;use cache&#8217;, que funciona como um Cache-Control em n\u00edvel de componente \u2014 voc\u00ea declara explicitamente o que pode ser cacheado e por quanto tempo, usando a fun\u00e7\u00e3o cacheLife(&#8216;hours&#8217;), cacheLife(&#8216;days&#8217;) e assim por diante.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">O que torna isso relevante para devs acostumados com as vers\u00f5es anteriores do App Router \u00e9 a mudan\u00e7a de modelo: enquanto as vers\u00f5es anteriores tinham caching impl\u00edcito e muitas vezes surpreendente, o novo modelo \u00e9 opt-in e expl\u00edcito. Voc\u00ea decide o que \u00e9 cacheado. O Next.js aplica o cache no browser durante navega\u00e7\u00f5es client-side, no servidor durante server rendering, ou pr\u00e9-gera o conte\u00fado no build time \u2014 dependendo da sua configura\u00e7\u00e3o.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A partir do Next.js 16.4, todos os novos apps criados com create-next-app j\u00e1 v\u00eam com Cache Components habilitado por padr\u00e3o. Para apps existentes, o Next.js disponibiliza ferramentas de migra\u00e7\u00e3o agentica, discutidas mais adiante. O modelo deve se tornar o padr\u00e3o absoluto no Next.js 17.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Para habilitar em um app existente, basta dois flags no next.config.ts:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>const nextConfig = {<br>cacheComponents: true,<br>partialPrefetching: true,<br>};<\/code><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img fetchpriority=\"high\" decoding=\"async\" width=\"1024\" height=\"536\" src=\"https:\/\/news.webgoncalves.online\/wp-content\/uploads\/2026\/10\/nextjs164-wp-02-1024x536.webp\" alt=\"ENSURESTATIC: CONTROLE TOTAL SOBRE ROTAS EST\u00c1TICAS\" class=\"wp-image-41\" srcset=\"https:\/\/news.webgoncalves.online\/wp-content\/uploads\/2026\/10\/nextjs164-wp-02-1024x536.webp 1024w, https:\/\/news.webgoncalves.online\/wp-content\/uploads\/2026\/10\/nextjs164-wp-02-300x157.webp 300w, https:\/\/news.webgoncalves.online\/wp-content\/uploads\/2026\/10\/nextjs164-wp-02-766x401.webp 766w, https:\/\/news.webgoncalves.online\/wp-content\/uploads\/2026\/10\/nextjs164-wp-02-900x472.webp 900w, https:\/\/news.webgoncalves.online\/wp-content\/uploads\/2026\/10\/nextjs164-wp-02-600x315.webp 600w, https:\/\/news.webgoncalves.online\/wp-content\/uploads\/2026\/10\/nextjs164-wp-02.webp 1200w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>ENSURESTATIC: CONTROLE TOTAL SOBRE ROTAS EST\u00c1TICAS<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Para apps que precisam garantir que determinadas rotas sejam sempre est\u00e1ticas \u2014 sites de e-commerce, blogs, landing pages e portf\u00f3lios \u2014 o Next.js 16.4 introduce a diretiva ensureStatic. Ela falha o build se qualquer componente din\u00e2mico entrar em uma rota que deveria ser 100% est\u00e1tica.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">O uso \u00e9 simples: voc\u00ea exporta ensureStatic com o n\u00edvel de garantia desejado diretamente do arquivo de rota. O n\u00edvel &#8216;navigation&#8217; \u00e9 o mais restritivo \u2014 garante que toda navega\u00e7\u00e3o para aquela rota sirva conte\u00fado completamente est\u00e1tico. O n\u00edvel &#8216;prefetch&#8217; garante que os prefetches n\u00e3o busquem conte\u00fado din\u00e2mico. O n\u00edvel &#8216;shell&#8217; garante que apenas a estrutura inicial da p\u00e1gina seja est\u00e1tica.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Voc\u00ea tamb\u00e9m pode aplicar ensureStatic em um layout, propagando a restri\u00e7\u00e3o para todas as p\u00e1ginas dentro dele. Para times que gerenciam grandes apps com centenas de rotas, isso se torna um mecanismo de governan\u00e7a valioso: nenhum desenvolvedor vai acidentalmente adicionar uma chamada ao banco de dados em uma rota que deveria ser servida direto do CDN.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Para apps de e-commerce com p\u00e1ginas de produto de alto tr\u00e1fego, ou blogs com milhares de artigos, essa feature pode ser o elemento que elimina custos de compute inesperados em produ\u00e7\u00e3o.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>NAVIGATION() API: CONTROLE GRANULAR DE PREFETCH<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">O novo modelo de Cache Components funciona em conjunto com Partial Prefetching \u2014 a capacidade de prefetchear apenas partes de uma p\u00e1gina. O Next.js 16.4 vai al\u00e9m e introduz a navigation() API, que permite excluir componentes espec\u00edficos de um prefetch, deferindo o carregamento deles at\u00e9 que uma navega\u00e7\u00e3o real aconte\u00e7a.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">O caso de uso mais claro \u00e9 uma caixa de entrada de e-mail: voc\u00ea quer prefetchear o assunto de cada mensagem quando ela aparece na lista, mas n\u00e3o quer buscar toda a thread de mensagens antecipadamente \u2014 isso seria caro e desperdi\u00e7aria recursos para mensagens que o usu\u00e1rio nunca vai abrir.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Com navigation(), voc\u00ea marca o componente de thread para s\u00f3 carregar na navega\u00e7\u00e3o real. O resultado \u00e9 uma UX instant\u00e2nea para o conte\u00fado prefetchado, sem colocar press\u00e3o desnecess\u00e1ria no servidor. Em paralelo, a nova prefetch() API permite o inverso \u2014 excluir conte\u00fado que normalmente apareceria no shell de uma rota, deferindo-o at\u00e9 um prefetch expl\u00edcito.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Essas duas APIs d\u00e3o ao desenvolvedor controle cir\u00fargico sobre o que carrega em cada etapa de uma navega\u00e7\u00e3o, algo que antes exigia hacks ou solu\u00e7\u00f5es de contorno no App Router.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>TURBOPACK EM 16.4: MENOS DISCO, BUILDS MAIS R\u00c1PIDOS<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">O Turbopack recebeu melhorias expressivas de performance e uso de recursos no Next.js 16.4. A mudan\u00e7a mais imediata \u00e9 a redu\u00e7\u00e3o de 20-25% no tamanho do cache em disco durante o desenvolvimento \u2014 resultado de uma combina\u00e7\u00e3o de compress\u00e3o Zstandard para dados principais e LZ4 para metadados, al\u00e9m de rotinas de compacta\u00e7\u00e3o mais agressivas para descartar dados obsoletos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Outra melhoria relevante para o dia a dia \u00e9 o Lazy HMR (Hot Module Replacement): em vers\u00f5es anteriores, modificar um m\u00f3dulo compartilhado podia disparar recompila\u00e7\u00f5es para todas as p\u00e1ginas visitadas na sess\u00e3o atual, mesmo que voc\u00ea n\u00e3o estivesse mais vendo-as. Com Lazy HMR, o Turbopack s\u00f3 compila e aplica atualiza\u00e7\u00f5es quando uma requisi\u00e7\u00e3o realmente precisa delas. A p\u00e1gina que voc\u00ea est\u00e1 vendo atualiza normalmente, enquanto as outras aguardam at\u00e9 serem acessadas novamente.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Em produ\u00e7\u00e3o, o Turbopack 16.4 gera nomes de classes de CSS Modules mais curtos, reduzindo o tamanho das stylesheets e do HTML e JavaScript que as referenciam. O export mangling complementa isso reduzindo nomes de exports internos de JavaScript. Para apps com muitos m\u00f3dulos CSS, a redu\u00e7\u00e3o pode ser percept\u00edvel no tamanho final do bundle.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Para quem usa Babel, PostCSS ou webpack loaders no pipeline, o novo suporte a worker threads promete reduzir o overhead de comunica\u00e7\u00e3o entre processos. No lugar de processos Node.js separados comunicando via sockets, as ferramentas passam a rodar dentro do mesmo processo \u2014 o que reduz uso de mem\u00f3ria e CPU, especialmente em builds longos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>REACT 19.3: VIEW TRANSITIONS EST\u00c1VEL E MAIS<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">O Next.js 16.4 vem com React 19.3 inclu\u00eddo. A principal novidade \u00e9 a estabiliza\u00e7\u00e3o das View Transitions \u2014 a API nativa do browser para animar transi\u00e7\u00f5es entre estados de UI que estava em fase experimental no React 19.x. Com a estabiliza\u00e7\u00e3o, voc\u00ea pode implementar anima\u00e7\u00f5es de navega\u00e7\u00e3o suaves sem depender de bibliotecas de terceiros, e o React gerencia o ciclo de vida da transi\u00e7\u00e3o junto com o ciclo de renderiza\u00e7\u00e3o dos componentes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Fragment Refs \u00e9 outra adi\u00e7\u00e3o est\u00e1vel no 19.3. Ela permite anexar uma ref a um React Fragment \u2014 algo que antes era imposs\u00edvel porque Fragments n\u00e3o geram um n\u00f3 DOM real. Com Fragment Refs, voc\u00ea pode medir o bounding box de um grupo de elementos, fazer scroll at\u00e9 eles ou inspecionar seus filhos sem precisar adicionar um wrapper div desnecess\u00e1rio \u00e0 marca\u00e7\u00e3o.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A nova browser() API, tamb\u00e9m parte do React 19.3, oferece uma forma declarativa de acessar APIs do browser dentro de Server Components e durante o ciclo de renderiza\u00e7\u00e3o, sem quebrar o modelo de servidor. Para o artigo detalhado sobre o React 19.3, a equipe do React publicou um post completo no blog oficial.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1024\" height=\"536\" src=\"https:\/\/news.webgoncalves.online\/wp-content\/uploads\/2026\/10\/nextjs164-wp-03-1024x536.webp\" alt=\"NEXT UPGRADE --AGENT: IA QUE MIGRA SEU APP\" class=\"wp-image-42\" srcset=\"https:\/\/news.webgoncalves.online\/wp-content\/uploads\/2026\/10\/nextjs164-wp-03-1024x536.webp 1024w, https:\/\/news.webgoncalves.online\/wp-content\/uploads\/2026\/10\/nextjs164-wp-03-300x157.webp 300w, https:\/\/news.webgoncalves.online\/wp-content\/uploads\/2026\/10\/nextjs164-wp-03-766x401.webp 766w, https:\/\/news.webgoncalves.online\/wp-content\/uploads\/2026\/10\/nextjs164-wp-03-900x472.webp 900w, https:\/\/news.webgoncalves.online\/wp-content\/uploads\/2026\/10\/nextjs164-wp-03-600x315.webp 600w, https:\/\/news.webgoncalves.online\/wp-content\/uploads\/2026\/10\/nextjs164-wp-03.webp 1200w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>NEXT UPGRADE &#8211;AGENT: IA QUE MIGRA SEU APP<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Uma das features mais pr\u00e1ticas do Next.js 16.4 \u00e9 a nova flag &#8211;agent no comando next upgrade. Ao inv\u00e9s de ler manualmente os changelogs e aplicar codemods, voc\u00ea ou seu agente de IA roda um \u00fanico comando e o processo de migra\u00e7\u00e3o \u00e9 coordenado automaticamente: o comando verifica a vers\u00e3o instalada, seleciona a release alvo, prepara guias de migra\u00e7\u00e3o espec\u00edficos para a sua vers\u00e3o, aplica codemods dispon\u00edveis e verifica que o app ainda funciona ap\u00f3s a migra\u00e7\u00e3o.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Para times que mant\u00eam m\u00faltiplos apps Next.js ou que est\u00e3o atrasados em vers\u00f5es por falta de tempo para migrar, isso representa uma redu\u00e7\u00e3o real de fric\u00e7\u00e3o. O comando usa next@canary para garantir que o tooling de upgrade esteja na vers\u00e3o mais recente, mesmo que o app ainda esteja em uma vers\u00e3o mais antiga do Next.js.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Em paralelo, o experimental.agentUpgrade permite configurar lembretes autom\u00e1ticos de upgrade durante next dev ou next build. Com a pol\u00edtica &#8216;security&#8217;, voc\u00ea \u00e9 notificado sobre upgrades que resolvem vulnerabilidades conhecidas. Com &#8216;latest&#8217;, \u00e9 notificado sobre qualquer nova major ou minor. Isso transforma a manuten\u00e7\u00e3o de vers\u00e3o de uma tarefa que acontece raramente e com atrito em algo cont\u00ednuo e gerenciado.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>CONCLUS\u00c3O<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">O Next.js 16.4 n\u00e3o \u00e9 uma atualiza\u00e7\u00e3o incremental \u2014 \u00e9 o ponto de chegada de um redesenho do modelo de caching do App Router que vinha sendo constru\u00eddo desde o 15.x. Com Cache Components passando a ser o padr\u00e3o recomendado para todos os apps, o framework finalmente tem uma resposta clara e expl\u00edcita para uma das maiores fontes de confus\u00e3o dos \u00faltimos dois anos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Para devs mid-level, o momento \u00e9 de experimentar o novo modelo em projetos novos \u2014 os apps criados com create-next-app j\u00e1 v\u00eam configurados. Para projetos existentes, as ferramentas de migra\u00e7\u00e3o agentica reduzem o custo de ado\u00e7\u00e3o. Para times de produto, ensureStatic e a navigation() API s\u00e3o ferramentas de controle que resolvem problemas reais de performance e custo de infra.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">O que voc\u00ea est\u00e1 esperando para testar o Cache Components? Deixa nos coment\u00e1rios se voc\u00ea j\u00e1 est\u00e1 usando o novo modelo ou se ainda est\u00e1 no modelo anterior.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>INTRODU\u00c7\u00c3O O Next.js 16.4 foi lan\u00e7ado em 6 de outubro de 2026 com uma das mudan\u00e7as mais significativas desde a introdu\u00e7\u00e3o do App Router: o modelo Cache Components deixa de ser experimental e passa a ser a recomenda\u00e7\u00e3o oficial para todos os apps Next.js. Mais do que uma atualiza\u00e7\u00e3o incremental, essa vers\u00e3o representa a consolida\u00e7\u00e3o [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":40,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"page_builder":"","footnotes":""},"categories":[3],"tags":[27,25,30,12,31,26,28,24,14,29],"class_list":["post-37","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-frontend","tag-app-router","tag-cache-components","tag-ensurestatic","tag-frontend-2026","tag-javascript","tag-next-js-16-4","tag-react-19-3","tag-turbopack","tag-typescript","tag-view-transitions"],"_links":{"self":[{"href":"https:\/\/news.webgoncalves.online\/index.php?rest_route=\/wp\/v2\/posts\/37","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/news.webgoncalves.online\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/news.webgoncalves.online\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/news.webgoncalves.online\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/news.webgoncalves.online\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=37"}],"version-history":[{"count":2,"href":"https:\/\/news.webgoncalves.online\/index.php?rest_route=\/wp\/v2\/posts\/37\/revisions"}],"predecessor-version":[{"id":44,"href":"https:\/\/news.webgoncalves.online\/index.php?rest_route=\/wp\/v2\/posts\/37\/revisions\/44"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/news.webgoncalves.online\/index.php?rest_route=\/wp\/v2\/media\/40"}],"wp:attachment":[{"href":"https:\/\/news.webgoncalves.online\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=37"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/news.webgoncalves.online\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=37"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/news.webgoncalves.online\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=37"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}