Как устроено кеширование в Next.js App Router?
Server Side Rendering
Next.js кеширует результаты на нескольких уровнях, чтобы меньше работать на сервере и быстрее отвечать.
Уровни
- Request Memoization — одинаковые
fetchвнутри одного рендера выполняются один раз. - Data Cache — результаты
fetchхранятся между запросами и деплоями, пока их не инвалидируют. - Full Route Cache — готовый HTML и RSC-данные статических маршрутов.
- Router Cache — клиентский кеш сегментов для быстрой навигации.
Управление
fetch(url, { cache: 'no-store' }); // всегда свежие данные
fetch(url, { next: { revalidate: 3600 } }); // обновлять раз в час
fetch(url, { next: { tags: ['posts'] } }); // метка для инвалидации- Использование
cookies(),headers()илиno-storeделает маршрут динамическим. - Инвалидация:
revalidatePath,revalidateTag.
Подвохи
Правила кеширования менялись между версиями Next.js, поэтому поведение по умолчанию нужно сверять с документацией текущей версии, а данные пользователя не должны попадать в общий кеш.
Коротко для собеседования
Есть кеши запроса, данных, маршрута и клиента. Управляем ими опциями fetch и инвалидацией по пути или тегу.