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