~3 دقیقه مطالعه • بروزرسانی ۹ آبان ۱۴۰۴
۱. 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 ابزاری قدرتمند برای کنترل دقیق رفتار کش در سطح کامپوننت یا تابع است. با استفاده از پروفایلهای آماده یا سفارشی، میتوانید بهینهسازی عملکرد و کنترل بهروزرسانی دادهها را بهصورت دقیق انجام دهید.
نوشته و پژوهش شده توسط دکتر شاهین صیامی