الوثائقأوضاع صفحات الملف
ISR (لا معنى لها أثناء إعادة التحقق)
التعريف
يقوم ISR بتخزين HTML لصفحة واحدة مؤقتًا، لكل عنوان URL، ويعرضه حتى تنتهي نافذته. لا يزال يتم عرض النسخة منتهية الصلاحية بينما يتم عرض نسخة جديدة في الخلفية: أي stale-while-revalidate.
كيف يعمل
revalidate = N في الجزء الأمامي من صفحة .nexy يتم تشغيله. N هو عدد الثواني؛ تعني القيمة المفقودة أو الصفرية أو السلبية عدم وجود ذاكرة تخزين مؤقت على الإطلاق.
مفتاح ذاكرة التخزين المؤقت هو مسار الطلب فقط - request.scope["path"]. سلسلة الاستعلام ليست جزءًا منها.
| ما | القيمة |
|---|---|
| مفتاح | مسار URL (/blog/hello) |
| التخزين | في الذاكرة، في العملية التي تعرض الصفحة |
| تم ربط | 256 إدخالًا لكل عملية، على الأقل تم إخلاؤها مؤخرًا |
| رأس الاستجابة | cache-control: public, s-maxage=N, stale-while-revalidate=N |
تقديم دورة الحياة
- يصل طلب لصفحة تعلن
revalidate. - لم يتم الإدخال بعد: يتم عرض الصفحة وتخزينها وإعادتها.
- إدخال أصغر من
Nثانية: يتم إرجاعه كما هو، ولا يتم عرض الصفحة. - إدخال أقدم من
Nثانية: يتم إرجاع الإدخال القديم على الفور، وتعرض مهمة الخلفية إدخالاً جديدًا. - إذا ظهر عرض الخلفية هذا، فسيظل الإدخال القديم وسيحاول الطلب القديم التالي مرة أخرى.
متى تستخدم
- نفس HTML لكل زائر: منشور مدونة، صفحة منتج، صفحة توثيق.
- تتم قراءة الصفحة كثيرًا ونادرًا ما تتغير.
- يمكن أن يكون عمر البيانات بضع ثوانٍ دون أن يلاحظها أحد.
التكوين
revalidate = 60<h1>Rendered at most once per minute</h1>N هو عدد صحيح عادي. لا يوجد تجاوز لكل مسار في أي مكان آخر، ومعالجات .py ليست صفحات: فهي لا تدخل أبدًا إلى ذاكرة التخزين المؤقت هذه.
مثال
منشور مدونة يقرأ قاعدة بيانات:
revalidate = 300slug: prop[str] = "untitled"posts = {"hello": {"title": "Hello"}, "other": {"title": "Other"}}post = posts.get(slug, {"title": "Untitled"})<h1>{{ post.title }}</h1>الطلب الأول إلى /blog/hello العروض والمخازن. يتم تقديم الـ 300 ثانية التالية من الذاكرة. /blog/other هو مدخل منفصل، يتم تقديمه وتخزينه بمفرده. في المشروع الحقيقي posts يأتي من قاعدة بيانات أو خدمة، يتم استدعاؤها مرة واحدة في كل عملية تجديد.
القيود
يضمن Nexy أن مفتاح ذاكرة التخزين المؤقت هو المسار، ويتم تقديم النسخة القديمة أثناء التجديد، ويكون المتجر مقيدًا وآمنًا.
وفقًا للاتفاقية، فإن الصفحة التي تعلن أن revalidate هي محتوى عام. اكتبه كما لو أن كل زائر يرى نفس HTML.
تطبيقك مسؤول عن كل شيء آخر:
| الحد | ما معناه |
|---|---|
| تم تجاهل سلسلة الاستعلام | /search?q=a و /search?q=b يشتركان في إدخال واحد. لا تقم بتخزين صفحة بحث مؤقتًا. |
| الجلسة ليست معزولة | الرد يقول public، ويتم تقديم HTML الخاص بالزائر الأول للجميع. لا تقرأ الجلسة أبدًا في صفحة بها revalidate. |
| لا يوجد إبطال من جانب الخادم | لا شيء يزيل الإدخال قبل انتهاء نافذته. revalidate(...) داخل إجراء يخبر المتصفح فقط بإعادة تحميل المسار؛ لا تلمس ذاكرة التخزين المؤقت هذه. |
| ذاكرة تخزين مؤقت واحدة لكل عملية | يحتفظ العديد من العاملين بعدة ذاكرة تخزين مؤقت بمحتويات مختلفة. |
| عمليات التجديد المتزامنة | لا شيء يزيل تكرارها: يمكن لعشرة طلبات قديمة أن تبدأ عشرة عمليات عرض. |
| الأخطاء صامتة | التجديد الفاشل يستمر في خدمة الصفحة القديمة؛ يتم تسجيل الفشل، ولم يتم إرجاعه. |