~2 دقیقه مطالعه • بروزرسانی ۴ آبان ۱۴۰۴
چرا کشینگ مهم است؟
کشینگ یعنی ذخیرهسازی داده یا خروجی رندر برای استفادهٔ مجدد بدون نیاز به محاسبه یا دریافت مجدد. Next.js بهصورت پیشفرض تا حد ممکن کش میکند تا سرعت بارگذاری صفحات افزایش یابد و هزینههای سرور کاهش یابد.
انواع کشینگ در Next.js
- Request Memoization: حافظهسازی پاسخ توابع در طول یک درخواست سرور. فقط تا پایان رندرینگ فعال است.
- Data Cache: ذخیرهسازی دادههای fetch شده در سرور. پایدار است تا زمانی که revalidate شود.
- Full Route Cache: ذخیرهسازی HTML و payloadهای RSC برای مسیرهای استاتیک. پایدار و قابل revalidate.
- Router Cache: ذخیرهسازی payloadهای RSC در کلاینت برای ناوبری سریعتر. محدود به نشست کاربر یا زمان مشخص.
استراتژیهای رندرینگ و تأثیر آنها بر کشینگ
- Static Rendering: مسیرها در زمان build یا پس از revalidate رندر میشوند و در Full Route Cache ذخیره میشوند.
- Dynamic Rendering: مسیرها در زمان درخواست رندر میشوند (مثلاً با کوکی یا پارامترهای URL) و فقط از Data Cache استفاده میکنند.
بررسی عمیق مکانیزمها
Request Memoization
Next.js بهصورت خودکار درخواستهای GET مشابه را در طول یک رندر memoize میکند. اگر یک URL چند بار fetch شود، فقط یکبار اجرا میشود.
Data Cache
با استفاده از گزینههای cache و next.revalidate میتوان کنترل کرد. مثلاً:
{ next: { revalidate: 3600 } }
داده را هر ساعت تازهسازی میکند. همچنین میتوان با revalidateTag یا revalidatePath بهصورت دستی کش را تازه کرد.
Full Route Cache
مسیرهای استاتیک بهصورت پیشفرض در زمان build کش میشوند. استفاده از APIهای پویا مانند کوکی باعث غیرفعال شدن این کش میشود.
Router Cache
در کلاینت، payloadهای RSC برای ناوبریهای بعدی کش میشوند و پس از رفرش صفحه یا گذشت زمان (مثلاً ۵ دقیقه) پاک میشوند.
چگونه کشینگ را مدیریت کنیم؟
غیرفعالسازی کش
برای غیرفعال کردن کش داده:
{ cache: 'no-store' }برای مسیرها:
dynamic = 'force-dynamic'یاrevalidate = 0
تازهسازی کش (Revalidation)
- تنظیم بازه زمانی (مثلاً هر ساعت)
- تازهسازی دستی با
revalidateTagیاrevalidatePath
ابزارهای کنترل کش
<Link>router.prefetchfetchrevalidatePath
جمعبندی
کشینگ در Next.js نقش کلیدی در بهینهسازی عملکرد و کاهش هزینهها دارد. با درک انواع کش، استراتژیهای رندرینگ، و ابزارهای مدیریت کش، میتوانید اپلیکیشنهایی سریع، مقیاسپذیر و اقتصادی بسازید.
نوشته و پژوهش شده توسط دکتر شاهین صیامی