۱. cacheLife چیست؟
cacheLife تابعی در Next.js است که مدت زمان اعتبار کش برای یک تابع یا کامپوننت را مشخص میکند. این تابع باید در کنار دستور 'use cache' استفاده شود و درون همان تابع یا فایل قرار گیرد.
۲. فعالسازی اولیه
برای استفاده از cacheLife، ابتدا باید ویژگی cacheComponents را در فایل next.config.ts فعال کنید:
const nextConfig = {
cacheComponents: true,
}
export default nextConfig۳. پروفایلهای آماده کش
Next.js پروفایلهای کش آمادهای ارائه میدهد که شامل موارد زیر هستند:
| پروفایل | کاربرد | stale | revalidate | expire |
|---|---|---|---|---|
| seconds | دادههای لحظهای | 30s | 1s | 1m |
| minutes | محتوای پرتغییر | 5m | 1m | 1h |
| hours | چند بار در روز | 5m | 1h | 1d |
| days | روزانه | 5m | 1d | 1w |
| weeks | هفتگی | 5m | 1w | 30d |
| max | محتوای پایدار | 5m | 30d | 1y |
۴. تفاوت stale، revalidate و expire
- stale: مدت زمانی که داده کششده بدون بررسی سرور در سمت کلاینت نمایش داده میشود
- revalidate: پس از این زمان، سرور داده را در پسزمینه بهروزرسانی میکند
- expire: پس از این زمان بدون درخواست، کش منقضی شده و درخواست بعدی منتظر دادهٔ تازه میماند
۵. استفاده از پروفایل آماده
// app/blog/page.tsx
'use cache'
import { cacheLife } from 'next/cache'
export default async function BlogPage() {
cacheLife('days') // محتوای بلاگ روزانه بهروزرسانی میشود
const posts = await getBlogPosts()
return <div>{posts}</div>
}۶. تعریف پروفایل سفارشی
// next.config.ts
const nextConfig = {
cacheComponents: true,
cacheLife: {
editorial: {
stale: 600, // 10 دقیقه
revalidate: 3600, // 1 ساعت
expire: 86400, // 1 روز
},
},
}
export default nextConfig۷. استفاده از پروفایل سفارشی
// app/editorial/page.tsx
'use cache'
import { cacheLife } from 'next/cache'
export default async function EditorialPage() {
cacheLife('editorial')
// ...
}۸. استفاده از پروفایل خطی (inline)
// app/page.tsx
'use cache'
import { cacheLife } from 'next/cache'
export default async function Page() {
cacheLife({
stale: 3600,
revalidate: 900,
expire: 86400,
})
return <div>Page</div>
}۹. رفتار کش در کلاینت
ویژگی stale فقط روی کش کلاینت تأثیر دارد و به هدر Cache-Control مربوط نیست. مقدار stale از طریق هدر x-nextjs-stale-time ارسال میشود و کلاینت از آن برای تصمیمگیری دربارهٔ اعتبار داده استفاده میکند.
۱۰. مثالهای پیشرفته
- صفحه محصول با کش ساعتی:
cacheLife('hours') - ویجت لحظهای با کش ثانیهای:
cacheLife('seconds') - تابع تنظیمات پایدار:
cacheLife('max')
جمعبندی
تابع cacheLife در Next.js ابزاری قدرتمند برای کنترل دقیق رفتار کش در سطح کامپوننت یا تابع است. با استفاده از پروفایلهای آماده یا سفارشی، میتوانید بهینهسازی عملکرد و کنترل بهروزرسانی دادهها را بهصورت دقیق انجام دهید.