В Next.js четыре кэша, которые наслаиваются: Request Memoization, Data Cache, Full Route Cache и Router Cache (клиент). Отладка «почему stale» — это определить, какой слой держит данные.
Разбор
Запрос проходит от самого краткоживущего к персистентному, затем на клиенте — четвёртый слой:
| Layer | Where | Lifetime | Dedupes / caches |
|---|
| Request Memoization | server (React) | one render pass | identical fetches in a single request |
| Data Cache | server (Next) | across requests & deploys | fetch result values |
| Full Route Cache | server (Next) | until revalidated / redeploy | rendered HTML + RSC payload |
| Router Cache | client (memory) | session (with staleTimes) | RSC payloads of visited routes |
Ментальная модель
- Memoization — не дергаем один и тот же
fetch дважды во время одного render.
- Data Cache — не refetch между разными запросами.
- Full Route Cache — не перерендериваем статический route вообще.
- Router Cache — не бьём в сеть при client navigation.
Диагностический вопрос всегда один: «какой из четырёх слоёв держит stale?»
Итог
Четыре кэша — разные lifetime и scope; senior-навык — назвать слой и знать, как его инвалидировать (revalidateTag, revalidatePath, router.refresh).