Corrija o cache excessivo no Next.js 15
Next.js 15 melhora cache com Dynamic IO, equilibrando desempenho e dados frescos. Saiba como evitar cache desatualizado.

O cache é uma ferramenta poderosa, mas pode se tornar um problema quando começa a trabalhar contra você. Desde sua estreia na versão 13, o cache agressivo padrão do Next.js tem causado dados desatualizados, incompatibilidades com fontes de backend e comportamentos inconsistentes.
O Next.js 15 introduz o Dynamic IO caching, uma forma mais flexível e granular de controlar o que é armazenado em cache. Isso equilibra desempenho e frescor dos dados sem forçar os desenvolvedores a escolher entre cache completo ou nenhum cache.
Problemas com cache no Next.js
O cache do Next.js não depende de um único mecanismo. Em vez disso, utiliza múltiplas estratégias, incluindo cache de dados e memoização de requisições. Embora eficaz, isso pode resultar em cache excessivo, ignorando mudanças dinâmicas e servindo dados desatualizados.
Por exemplo, uma aplicação simples que faz uma requisição assíncrona a uma API pode acabar servindo dados em cache em vez de dados atualizados.
async function fetchImage() { const req = await fetch( `https://api.unsplash.com/photos/random?client_id=${apiKey}` ); const res = await req.json(); return { imageURL: res.urls.full, }; }
Por padrão, o Next.js irá armazenar em cache esta página, mesmo que busque conteúdo dinâmico. Para evitar isso, é possível adicionar cache: 'no-store'
à chamada de busca.
async function fetchImage() { const req = await fetch( `https://api.unsplash.com/photos/random?client_id=${apiKey}`, { cache: "no-store", } ); const res = await req.json(); return { imageURL: res.urls.full, }; }
Introduzindo o Dynamic IO
O Dynamic IO é um recurso experimental no Next.js 15 que inverte o modelo de cache padrão. Em vez de armazenar em cache todas as operações assíncronas, ele permite que você escolha o que armazenar. Isso oferece controle sobre a frescura dos dados sem precisar contornar os padrões do framework.
npm install next@canary
Para habilitar o Dynamic IO, adicione a flag experimental dynamicIO
no arquivo next.config.ts
e defina como true
.
import type { NextConfig } from 'next' const nextConfig: NextConfig = { experimental: { dynamicIO: true, }, } export default nextConfig
O uso do Dynamic IO permite que o Next.js trate a página como dinâmica por padrão, garantindo dados atualizados sem camadas de cache.
Conclusão
O Dynamic IO representa uma evolução significativa na forma como o cache é tratado no Next.js, abordando pontos problemáticos de cache excessivo e permitindo fluxos de trabalho mais intencionais e orientados para o desempenho.