يخزّن LaRecipe مؤقتًا بحسب المحتوى، لا بحسب الوقت. تُحفظ الصفحة المُصيَّرة تحت مفتاح مبني من محتوى الصفحة ومن كل ما يشكّل HTML الخاص بها، فتحصل الصفحة المتغيّرة على مفتاح جديد، ولا يُفرَّغ شيء يدويًا أبدًا. ولا تضبط شيئًا من ذلك: في صفحة النشر الأمران اللذان يجهّزان الذاكرة المؤقتة عند النشر.
يستخدم LaRecipe مخزن الذاكرة المؤقتة الافتراضي في تطبيقك ما لم تسمِّ مخزنًا آخر:
'cache' => [
'store' => env('LARECIPE_CACHE_STORE'),
],يصلح أي مخزن دائم: database و file و redis و memcached. مجموعة المستودع تقرأ ملفاتها من القرص، فالذاكرة المؤقتة الفارغة تكلّف وقت تصيير، لا صحة النتيجة. أما مجموعة قاعدة البيانات فتعمل دائمًا خلف هذا المخزن، ويبلّغ larecipe:validate عن خطأ حين تستخدم مجموعة قاعدة بيانات المخزن array أو null خارج الاختبارات. وكل ما يخزّنه LaRecipe بيانات بسيطة (نصوص ومصفوفات)، فيعمل مع الإعداد الافتراضي في Laravel 13 cache.serializable_classes => false.
ما الذي يُخزَّن
| ما يُخزَّن | يتغيّر حين |
|---|---|
| المقالات المُصيَّرة (HTML وجدول المحتويات والمكوّنات) | تتغيّر الصفحة، أو LaRecipe، أو تعريف مكوّن، أو امتداد Markdown، أو مظهر الكود |
| كتل الكود الملوّنة، كل منها على حدة | يتغيّر كود الكتلة أو لغتها أو علامات أسطرها |
| قوائم الصفحات والتنقل | يتغيّر أي ملف في الإصدار |
| سجلات البحث | يتغيّر أي ملف في الإصدار |
| خريطة الموقع | يتغيّر أي ملف في المجموعة |
عمليات التصيير التي فيها أخطاء (مكوّن مجهول، أو مقتطف مفقود، أو مرجع لم يعد يُحَل) لا تُخزَّن أبدًا، فيظهر الإصلاح في الطلب التالي. أما التحذيرات، مثل العنصر النائب للفيديو، فلا تمنع التخزين.
المفاتيح بالتفصيل
| ما يُخزَّن | المفتاح |
|---|---|
| المقالات المُصيَّرة | إصدار أداة التصيير، والصفحة (المجموعة والإصدار واللغة والمسار)، وبصمة محتواها، وإصدار بيئة Markdown، والنسخة (مسار تركيب المجموعة، إضافة إلى الجمهور حين تنطبق كتل الصلاحيات) |
| الكود الملوّن | إصدار مظهر الكود، واللغة، وعلامات الفروق والتظليل، والكود |
| قوائم الصفحات والتنقل | المجموعة والإصدار واللغة، إضافة إلى بصمة المصدر |
| سجلات البحث | المجموعة والإصدار واللغة، إضافة إلى بصمة المصدر |
| خريطة الموقع | بصمات كل الإصدارات وعنوان المجموعة، لمضيف تطبيقك نفسه (APP_URL) أو لـ route.domain الخاص بالمجموعة فقط |
يشمل إصدار بيئة Markdown سجلّ المكوّنات، فتسجيل مكوّن أو تغييره عبر LaRecipe::component() يعيد تصيير كل صفحة في الطلب التالي. وتأتي بصمة مجموعة المستودع من ملفاتها؛ راجع مصدر المستودع. أما بصمة مجموعة قاعدة البيانات فتعيش في مخزن الذاكرة المؤقتة وتتغيّر مع كل نشر؛ راجع مصدر قاعدة البيانات.
ما يقع خارج محتوى الصفحة
نوعان من الاعتماديات ليسا في نص الصفحة نفسه، ويتتبّعهما LaRecipe كليهما:
- تضمينات المقتطفات. تتذكر عملية التصيير المخزّنة بصمة كل ملف ضمّنته بـ
<<<. وحين يتغيّر أحد تلك الملفات، تُصيَّر الصفحة من جديد. - المراجع الحية. الصفحة التي تستخدم
<Route>أو<Artisan>أو<Model>أو<Event>تُخزَّن تحت بصمة الجزء من التطبيق الذي تقرؤه. غيّر اسم مسار، فتُصيَّر من جديد الصفحات التي تعرضه بالضبط، لا أكثر. وحين تكون المسارات مخزّنة مؤقتًا بالأمرphp artisan route:cache، تكون بصمة المسارات هي بصمة ملف ذاكرة المسارات المؤقتة. راجع المراجع الحية.
التجميع والتفريغ
يُصيّر larecipe:optimize كل صفحة من كل مجموعة مستودع في مخزن الذاكرة المؤقتة، ويبني قوائم الصفحات والتنقل وسجلات البحث، ويقيس كل فهرس بحث للزوار مقابل الميزانية. وهو مسجّل ضمن optimize في Laravel، فيشغّله php artisan optimize. وتُتخطّى مجموعات قاعدة البيانات: فهي تُخزَّن مؤقتًا عند النشر.
يمحو larecipe:clear ما جُمّع، ويشغّله php artisan optimize:clear.
ما يكتبه optimize، مع تشغيله على هذا الموقع
هذا تشغيل الموقع نفسه:
docs 3.x en ................... 46 pages, 542 search records, 127 KB index
docs 3.x ar ...................... 2 pages, 17 search records, 6 KB index
docs 2.x en .................... 17 pages, 76 search records, 10 KB index
INFO LaRecipe docs compiled.تُكتب قائمة ما جُمّع في bootstrap/cache/larecipe/optimized.php. ولا يجمع larecipe:optimize بيانات التحديث (provenance)؛ راجع مصدر المستودع.
larecipe:optimizeCompile LaRecipe pages, navigation and search records into the cache
php artisan larecipe:optimize [--set [SET]]| Option | Description | Default |
|---|---|---|
--set=SET | Only compile these doc sets |
ما يزيله clear، وما يبقيه
يمحو larecipe:clear الصفحات المُصيَّرة وسجلات البحث المذكورة في optimized.php، ثم تلك القائمة نفسها. يحذف bootstrap/cache/larecipe/optimized.php ولا شيء غيره في ذلك المجلد، فيبقى بعد optimize:clear فهرس بيانات التحديث المجمَّع، ولقطة المراجع الحية، وأنماط الخطّافات المجمَّعة.
larecipe:clearForget the LaRecipe pages and search records compiled by larecipe:optimize
php artisan larecipe:clearبعد ترقية LaRecipe
كل مفتاح يكتبه LaRecipe يبدأ برقم إصدار للصيغة (larecipe:v2:)، والصفحات المُصيَّرة تحمل أيضًا إصدار أداة التصيير. والإصدار الذي يغيّر ما يخزّنه LaRecipe، أو طريقة تصييره، يغيّر هذه الأرقام، فلا تُقرأ أبدًا المدخلات التي كتبها إصدار أقدم: بعد ترقية LaRecipe مباشرة، تبدأ الذاكرة المؤقتة فارغة وتُصيَّر الصفحات من جديد. شغّل php artisan optimize في عملية النشر تلك، كما تفعل أصلًا، فيحصل القرّاء على صفحات جاهزة من أول طلب. والمدخل الذي يأتي بشكل لا يتوقعه LaRecipe يُقرأ على أنه غير موجود، لا على أنه خطأ.
تتبّع عمليات التصيير بالحدث PageRendered
يُطلق PageRendered كلما صُيّرت مقالة لأنها لم تكن في الذاكرة المؤقتة، ومع كل طلب لنسخة Markdown. راجع مرجع الأحداث.
الاستجابات والذاكرات المؤقتة المشتركة
تذكر كل استجابة أيضًا كيف يجوز للمتصفح أو الخادم الوسيط أو شبكة CDN أن يحتفظ بها: الصفحة العامة المقدَّمة لزائر قابلة للتخزين المؤقت لدى الجميع، والاستجابة التي لا يحق إلا لقارئ واحد رؤيتها لا تصل أبدًا إلى ذاكرة مؤقتة مشتركة. وتجد في صفحة الأمان الترويسة لكل حالة. وتُقدَّم ملفات واجهة LaRecipe نفسها بأسماء مشتقة من بصمة المحتوى وبترويسة ثابتة لمدة عام؛ وتبيّن صفحة النشر كيف تنشرها ليقدّمها خادم الويب لديك بدلًا من ذلك.
التالي
- النشر:
optimizeوlarecipe:provenanceوlarecipe:cache:warmفي سكربت النشر. - الأمان: ترويسات الاستجابة والوصول في كل الواجهات.
- التحقق و doctor: افحص التوثيق قبل أن يُشحن.