کامپوننتهای کششونده در Next.js امکان ترکیب رندر ایستا و پویا را فراهم میکنند. بهجای انتخاب بین سرعت صفحات ایستا یا تازگی دادههای پویا، میتوان بخشهایی از رابط کاربری یا دادهها را کش کرد و در صورت نیاز، محتوای پویا را بهصورت استریم بارگذاری کرد. این قابلیت با استفاده از رندر جزئی (Partial Prerendering)، مرزهای Suspense، و دستور 'use cache' پیادهسازی میشود.
با فعالسازی این قابلیت، همهٔ مسیرها بهصورت پویا در نظر گرفته میشوند. اما میتوان بخشهایی از صفحه را کش کرد تا در شِل اولیهٔ HTML گنجانده شوند. این شِل بهسرعت به کاربر ارسال میشود و بخشهای پویا بهصورت استریم در ادامه بارگذاری میشوند.
برای فعالسازی، گزینهٔ cacheComponents: true را در فایل next.config.js تنظیم کنید.
کامپوننتهایی که از APIهای زمان اجرا مانند cookies()، headers() یا searchParams استفاده میکنند باید در مرز <Suspense> قرار گیرند تا سایر بخشها بتوانند ایستا رندر شوند.
کامپوننتهایی که دادههایی مانند fetch یا db.query() دریافت میکنند نیز باید در مرز Suspense قرار گیرند تا امکان استریم فراهم شود.
با افزودن 'use cache' به کامپوننت سروری یا توابع async میتوان خروجی آنها را کش کرد:
export async function getProducts() {
'use cache'
const data = await db.query('SELECT * FROM products')
return data
}استریمینگ باعث میشود بخشهایی از مسیر بهصورت موازی رندر و به مرور به کلاینت ارسال شوند. این کار زمان نمایش اولیه و تعاملپذیری را کاهش میدهد.
برای تعیین مدت زمان اعتبار کش، از cacheLife استفاده کنید:
export default async function Page() {
'use cache'
cacheLife('hours')
return <div>...</div>
}cookies() را به توابع کششونده ارسال کردبرای بازسازی فوری کش در همان درخواست:
export async function getCart() {
'use cache'
cacheTag('cart')
// fetch cart data
}
export async function updateCart(itemId) {
'use server'
// update cart
updateTag('cart')
}برای بازسازی با تأخیر و رفتار stale-while-revalidate:
export async function getPosts() {
'use cache'
cacheTag('posts')
// fetch posts
}
export async function createPost(post) {
'use server'
// create post
revalidateTag('posts', 'max')
}کامپوننتهای کششونده در Next.js امکان کنترل دقیق رندر و حافظه کش را فراهم میکنند. با ترکیب مرزهای Suspense، استریمینگ، و دستور 'use cache' میتوان اپلیکیشنهایی سریع، پویا و قابل نگهداری ساخت که هم تجربه کاربری عالی دارند و هم عملکرد بهینه.