کش و بازسازی داده‌ها در Next.js – بهینه‌سازی عملکرد با fetch، unstable_cache و تگ‌های هوشمند

کش و بازسازی داده‌ها در Next.js – بهینه‌سازی عملکرد با fetch، unstable_cache و تگ‌های هوشمند

updateTagrevalidateTagunstable_cachedata caching

~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 کنترل دقیق‌تری بر رفتار کش فراهم می‌کنند.


نوشته و پژوهش شده توسط دکتر شاهین صیامی