Capítulo 305 de 456
Incremental Static Regeneration atualiza páginas estáticas sem rebuild completo do site: serve a página cacheada instantaneamente e regenera em background após o período de revalidate.
revalidate (em getStaticProps): tempo em segundos; após esse período, a próxima request ainda recebe a versão cacheada (stale), mas dispara regeneração em background pra requests seguintes.fallback: 'blocking' (em getStaticPaths): paths não gerados no build são renderizados sob demanda na primeira request; se não existir, retorna 404.res.revalidate(path)): chamada numa API Route pra forçar regeneração de um path específico sem esperar o revalidate expirar; usa o path real, não um path reescrito.getStaticProps durante regeneração background: a última página gerada com sucesso continua sendo servida; Next.js tenta getStaticProps de novo na próxima request.NEXT_PRIVATE_DEBUG_CACHE=1: env var que loga hits/misses de cache ISR no console do servidor, útil pra debug.export const getStaticProps: GetStaticProps<Props> = async ({ params }) => {
const post = await fetch(`https://api.vercel.app/blog/${params.id}`).then((res) => res.json())
return {
props: { post },
// Next.js will invalidate the cache when a
// request comes in, at most once every 60 seconds.
revalidate: 60,
}
}
revalidate: 60 como TTL de regeneração em background.export default async function handler(req: NextApiRequest, res: NextApiResponse) {
if (req.query.secret !== process.env.MY_SECRET_TOKEN) {
return res.status(401).json({ message: 'Invalid token' })
}
try {
await res.revalidate('/posts/1')
return res.json({ revalidated: true })
} catch (err) {
return res.status(500).send('Error revalidating')
}
}
| Deployment Option | ISR Suportado |
|---|---|
| Node.js server | Sim |
| Docker container | Sim |
| Static export | Não |
| Adapters | Depende da plataforma |
| Version | Changes |
|---|---|
| v14.1.0 | cacheHandler customizado estável |
| v12.2.0 | On-Demand ISR estável (Pages Router) |
| v9.5.0 | ISR introduzido (Pages Router) |
res.revalidate precisa do path efetivo (ex. /posts/1), não de um rewrite tipo /post-1; Proxy não executa em requests de on-demand ISR.revalidate fixo junto com on-demand revalidation sem necessidade: se on-demand já cobre o caso, revalidate pode ficar de fora (default false, sem revalidação por tempo).revalidate por tempo.output: export nem fora do runtime Node.js.