Кэширование
Data Cache (Кэш данных) - Кэширует результаты fetch() запросов на сервере.
123456789// app/products/page.tsxexport default async function ProductsPage() {// ✅ Этот запрос будет кэшироваться по умолчаниюconst products = await fetch('https://api.example.com/products', {cache: 'force-cache' // по умолчанию}).then(r => r.json());return <ProductList products={products} />;}
Стратегии кэширования fetch:
- fetch(url, { cache: 'force-cache' }) - Кэшировать навсегда (по умолчанию)
- fetch(url, { cache: 'no-store' }) - Не кэшировать (всегда свежие данные)
- fetch(url, { next: { revalidate: 60 } }) - Кэшировать с перевалидацией через 60 секунд
- fetch(url, { next: { tags: ['products', 'category-1'] } }) - Кэшировать с тегом (для ручной инвалидации)
Full Route Cache - Кэширует полностью сгенерированный HTML страницы.
1234567// app/products/page.tsxexport const dynamic = 'force-static'; // ✅ Кэшируем HTMLexport default async function ProductsPage() {const products = await getProducts(); // Данные тоже кэшируютсяreturn <ProductList products={products} />;}
✅ Плюсы:
- Максимальная скорость
- Минимальная нагрузка на сервер/БД
- Отлично для статичного контента
❌ Минусы:
- Данные не обновляются без пересборки
- Не подходит для частых обновлений
Router Cache - React-кэш на клиенте, хранит страницы при навигации.
12345678// Это происходит автоматически при использовании <Link><Link href="/products">Товары</Link>// Next.js предзагружает и кэширует страницу /products на клиенте// Настройка длительности кэша<Link href="/products" prefetch={true}>Товары</Link>// prefetch={true} (по умолчанию) - кэшировать// prefetch={false} - не кэшировать
Время жизни Router Cache:
- Static страницы: 5 минут
- Dynamic страницы: 30 секунд