کش کردن یعنی ذخیرهٔ خروجی دریافت داده یا محاسبات برای پاسخگویی سریعتر در درخواستهای بعدی. بازسازی (Revalidation) نیز بهروزرسانی کش بدون نیاز به بازسازی کامل اپلیکیشن را ممکن میسازد.
در حالت پیشفرض، درخواستهای fetch کش نمیشوند. برای فعالسازی کش، از گزینهٔ cache: 'force-cache' استفاده کنید:
await fetch('https://...', { cache: 'force-cache' })برای بازسازی داده پس از مدت مشخص، از گزینهٔ next.revalidate استفاده کنید:
await fetch('https://...', { next: { revalidate: 3600 } })تابع unstable_cache برای کش کردن خروجی توابع async مانند کوئریهای پایگاه داده استفاده میشود:
const getCachedUser = unstable_cache(
async () => getUserById(userId),
[userId],
{
tags: ['user'],
revalidate: 3600,
}
)میتوان تگهایی برای بازسازی هدفمند و زمان اعتبار کش تعیین کرد.
تابع revalidateTag برای بازسازی کش بر اساس تگ استفاده میشود. حالت توصیهشده استفاده از 'max' برای رفتار stale-while-revalidate است:
revalidateTag('user', 'max')برای فعالسازی تگ در fetch:
await fetch('https://...', { next: { tags: ['user'] } })یا در unstable_cache:
unstable_cache(..., ['user'], { tags: ['user'] })برای بازسازی یک مسیر خاص پس از تغییر داده، از revalidatePath استفاده کنید:
revalidatePath('/profile')تابع updateTag فقط در Server Actions قابل استفاده است و کش را بلافاصله منقضی میکند. مناسب برای سناریوهای "خواندن پس از نوشتن":
updateTag('posts')
updateTag(`post-${post.id}`)تفاوتها:
با استفاده از کش هوشمند و بازسازی هدفمند در Next.js، میتوان عملکرد اپلیکیشن را بهینه کرد، دادههای تازه را سریعتر نمایش داد، و از بازسازی کامل مسیرها جلوگیری نمود. ابزارهایی مانند unstable_cache، revalidateTag و updateTag کنترل دقیقتری بر رفتار کش فراهم میکنند.