ISR (Incremental Static Regeneration)
Definição
ISR (Incremental Static Regeneration) é uma técnica que permite atualizar páginas estáticas geradas via SSG após o deploy, sem reexecutar o build completo da aplicação.
Ela possibilita que novas versões das páginas sejam geradas sob demanda, enquanto o restante do conteúdo continua sendo entregue como HTML estático.
Essa abordagem combina os benefícios do SSG (rapidez, cache, SEO) com a flexibilidade de atualização dinâmica — e é uma funcionalidade nativa do Next.js.
Objetivos do ISR
- Atualizar páginas estáticas sob demanda, sem rebuild completo.
- Evitar builds demorados mesmo com grandes quantidades de dados.
- Reduzir o tempo de build, regenerando apenas o que for necessário.
- Garantir performance, mantendo o HTML estático e atualizado.
Exemplo prático (Next.js com revalidate
)
// pages/produto/[id].js
export async function getStaticProps({ params }) {
const res = await fetch(`https://api.exemplo.com/produto/${params.id}`);
const produto = await res.json();
return {
props: { produto },
revalidate: 60, // revalida a cada 60 segundos
};
}
Neste exemplo:
A página é gerada estaticamente no primeiro acesso ou no momento do build.
Após 60 segundos, uma nova versão pode ser gerada em segundo plano.
Enquanto isso, o usuário continua recebendo a versão anterior.
A próxima requisição já recebe a versão mais recente.
O ciclo do ISR
- O usuário acessa uma página gerada estaticamente.
- O servidor entrega o HTML existente (como no SSG).
- Se o tempo de revalidação expirou, uma nova versão é gerada em segundo plano.
- Assim que a nova versão é criada, as próximas requisições recebem o HTML atualizado.
Considerações importantes
- Ideal para conteúdo que muda com frequência moderada, como produtos, artigos, páginas de eventos ou dashboards públicos.
- Diferente do SSR, o HTML não é gerado a cada requisição, o que alivia o servidor.
- Evita rebuilds longos, permitindo que apenas páginas acessadas sejam regeneradas.
- Não exige configuração de infraestrutura adicional — é nativo do Next.js.