cacheLife()
تحديد مدّة التخزين المؤقّت cacheLife()
تحدّد مدّة صلاحية بيانات مخزَّنة داخل نطاق 'use cache' — إما ببروفايل جاهز (زي 'hours') أو كائن مخصّص بأرقام دقيقة.
تُستدعى جوّه دالة أو مكوّن عليه 'use cache' فقط — استدعاؤها خارج هذا النطاق يرمي خطأ. لو ما استدعيتها، Next.js يستخدم بروفايل افتراضي (stale 5 دقائق، revalidate 15 دقيقة، ما ينتهي بالوقت).
البروفايلات الجاهزة: seconds وminutes وhours وdays وweeks وmax — كل وحدة توازن بين ثلاث قيم: stale (مدة صلاحية النسخة على المتصفح)، revalidate (متى يبدأ الخادم يحدّثها بالخلفية)، وexpire (أقصى مدة قبل ما يصير التوليد متزامنًا/blocking).
الصياغة
import { cacheLife } from 'next/cache';
cacheLife('hours') // أو كائن: cacheLife({ stale, revalidate, expire })📄 مثال
import { cacheLife } from 'next/cache';
async function getPost(slug: string) {
'use cache';
cacheLife('days'); // تدوينة تتحدث يوميًا
const res = await fetch(`/api/posts/${slug}`);
return res.json();
}أهم النقاط
| العنصر | الوظيفة |
|---|---|
| stale | مدة اعتبار البيانات صالحة على المتصفح بدون سؤال الخادم |
| revalidate | بعدها يبدأ الخادم يحدّث النسخة بالخلفية (شبيه بـ ISR) |
| expire | أقصى مدة قبل ما يصير التوليد متزامنًا (blocking) بدل الخلفية |
💡 نصائح عملية
- حدّدها صراحة بكل دالة مخزَّنة — أوضح من الاعتماد على البروفايل الافتراضي لأي شخص يقرأ الكود لاحقًا
- استخدم بروفايل جاهز أولًا (seconds/minutes/hours/days/weeks/max) قبل ما تكتب أرقامًا يدويّة
⚠️ أخطاء شائعة
- استدعاؤها خارج نطاق 'use cache' — ترمي خطأ لأنها لازم تكون جوّه دالة أو مكوّن عليه التوجيه
- استدعاؤها أكثر من مرّة فعليًا بنفس تنفيذ الدالة — يجوز استدعاؤها بمسارات تحكّم شرطية مختلفة، بس نداء واحد فقط ينفَّذ بكل مرّة
خصائص ذات صلة
🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار NEXTJS الكامل بالعربي.