تخطَّ إلى المحتوى

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 الكامل بالعربي.