TL;DR
Revalidate の 1 つ。指定した有効期限が切れると、Data Cache のデータを裏側で作り直す。
なぜ必要か
Next.js の ISR(Incremental Static Regeneration)のガイドによると、サイト全体をビルドし直さずに静的なコンテンツを更新できる。ほとんどのリクエストには事前にレンダリングした静的なページを返すので、サーバの負荷も減らせる。
仕組み
有効期限内は、キャッシュをそのまま返す。期限が切れた後の最初のリクエストでは、次のことを行う。
- 期限切れのキャッシュをそのまま返す
- 裏側でキャッシュを作り直す
- 次のリクエストから、作り直した新しいキャッシュを返す
有効期限は、fetch の next.revalidate や unstable_cache の revalidate で指定する。
注意点
期限切れのキャッシュを一度は返す点が、On-demand Revalidation と異なる。
ガイドでは、有効期限を長め(1 秒ではなく 1 時間など)にすることを勧めている。より細かく制御したいなら On-demand Revalidation を、リアルタイムのデータが必要なら動的レンダリングを検討する。1 つのルートに revalidate の異なる fetch が複数あると、ISR には最も短い時間が使われる。作り直しでエラーが起きたときは、最後に生成に成功したデータを返し続け、次のリクエストで作り直しを再び試みる。