تخطي للذهاب إلى المحتوى

ذاكرة الصفحات المؤقتة لـ Odoo: المتجر والمدونة من RAM أو ملف – سريعان للزوار ومحركات البحث والذكاء الاصطناعي

تقدّم الوحدة المفتوحة المصدر website_page_cache صفحات Odoo العامة شبه ثابتة، وتبقى محدَّثة عند التغييرات والترجمات، وتُظهر في لوحة المعلومات ما إذا كانت RAM لازمة وكم منها
10 نوفمبر 2026 بواسطة
ذاكرة الصفحات المؤقتة لـ Odoo: المتجر والمدونة من RAM أو ملف – سريعان للزوار ومحركات البحث والذكاء الاصطناعي

10 نوفمبر 2026  |  تطوير ذاتي  |  Odoo والأداء ومحركات البحث

ذاكرة الصفحات المؤقتة لمواقع Odoo: صفحات المتجر والمدونة العامة من ملف أو RAM بدل تصييرها من جديد عند كل طلب

يُنشئ موقع Odoo كل صفحة من جديد عند كل طلب: استعلامات قاعدة البيانات والقوالب والترجمات والأسعار. وهذا لا يُلاحَظ مع زائر واحد. أما عندما تجلب محركات البحث وفهرسات الذكاء الاصطناعي مئات أو آلاف الصفحات بلغات كثيرة، فيصبح ذلك حملًا دائمًا، ويضطر العملاء الحقيقيون إلى الانتظار معها. ولهذا طوّرنا وحدة Odoo 19 المسماة website_page_cache ونشرناها على GitHub بصفة مفتوحة المصدر (LGPL-3): تُقدَّم صفحات المتجر والمدونة المطلوبة دون تسجيل دخول شبه ثابتة من ذاكرة تخزين مؤقت، إما من ملفات أو من الذاكرة العاملة (RAM)، وكل تغيير – بما في ذلك تغيير الترجمة – يزيل الصفحات المتأثرة من الذاكرة المؤقتة تلقائيًا.

أمر مهم لكل من يريد أن يُعثَر عليه: الوحدة لا تحظر أي محرك بحث ولا أي زاحف ذكاء اصطناعي. تحصل جميع الفهرسات على المحتوى نفسه الذي يحصل عليه أي زائر، لكن بسرعة أكبر. يشرح هذا المقال كيف تعمل الذاكرة المؤقتة، وكيف تبدو لوحة المعلومات (مع لقطات شاشة)، وكيف تعرفون ما إذا كانت صفحاتكم تتسع في الذاكرة العاملة وكم من الذاكرة الإضافية يلزم، وما قواعد الأمان المعمول بها، وكيف تُثبّتون الوحدة.

ملخص موجز

الموضوعما ينطبق
الوحدةwebsite_page_cache لـOdoo 19، ترخيص LGPL-3، متاحة علنًا على GitHub
ما الذي يُخزَّن مؤقتًا؟صفحات المتجر والمدونة العامة (القوائم والتصنيفات والمنتجات والمقالات) بـكل لغة ولكل موقع
لمن؟للزوار المجهولين فقط، وطلبات GET التي لا تحتوي على معاملات بحث فقط، والحالة 200 مع HTML فقط
موقع التخزينملفات على القرص أو RAM (tmpfs، مشتركة بين جميع عمليات العمل)؛ تلقائيًا بحسب المساحة المطلوبة
الحداثةكل تغيير (بما في ذلك الترجمات والاستيراد والسكربتات) يُنشئ عبر مشغّلات قاعدة البيانات سجلًا في دفتر التغييرات ويُبطل الصفحات المتأثرة
لوحة المعلوماتالإعدادات والحالة والإحصاءات (الإصابات والإخفاقات ووقت الخادم الموفَّر) وفحص «هل يتسع في الذاكرة العاملة؟» بما في ذلك «الذاكرة الإضافية اللازمة»
محركات البحث والذكاء الاصطناعيلا شيء يُحظر أو يُبطَّأ؛ يحصل الجميع على الصفحات نفسها، لكن بسرعة أكبر
فرملة الطوارئمفتاح واحد (enabled = 0) يُوقف الذاكرة المؤقتة في جميع عمليات العمل خلال 30 ثانية

المشكلة: حِمل الزواحف على مواقع Odoo

Odoo نظام ERP متكامل، والموقع الإلكتروني ليس إلا واحدة من وحداته الكثيرة. كل صفحة يطلبها زائر أو روبوت تمر بالمسار نفسه: معالجة الطلب، واستعلام قاعدة البيانات، وتحميل بيانات المنتجات والأسعار، وتصيير قالب QWeb، وإدراج الترجمات، وتسليم النتيجة. ويستغرق ذلك بحسب الصفحة بضع مئات من أجزاء الثانية، ويشغل خلال هذا الوقت واحدة من عمليات العمل القليلة.

وبالنسبة إلى محركات البحث وفهرسات الذكاء الاصطناعي تُعد هذه مشكلة دائمة:

  • لغات كثيرة وعناوين كثيرة: الصفحة المتوفرة بـ46 لغة تعني للزاحف 46 عنوانًا مختلفًا.
  • يُطلب كل عنوان على حدة، وغالبًا من مرسِلين موزعين كثيرين في وقت واحد. ولا تفيد ذاكرة المتصفح المؤقتة التقليدية هنا، لأن كل طلب يخص عنوانًا جديدًا.
  • عمليات عمل قليلة: تعمل خدمة Odoo عادةً بحفنة من العمليات. وعندما تنشغل بطلبات الزواحف، ينتظر الزوار الحقيقيون في الطابور.
  • المحتوى نفسه يُبنى من جديد مرارًا: نادرًا ما يتغير مقال المدونة، لكنه يُجمَّع من جديد بجهد كبير عند كل طلب.

المخرج البديهي – حظر الزواحف – ليس خيارًا لشركة تريد أن يُعثَر عليها. فالظهور في محركات البحث وفي إجابات الذكاء الاصطناعي ذو قيمة. والأفضل أن تُقدَّم الصفحات بسرعة تجعل الحِمل لا يكاد يُذكر. وهذا بالضبط ما تفعله ذاكرة الصفحات المؤقتة.

كيف تعمل ذاكرة الصفحات المؤقتة

تتصل الوحدة بمدخل الطلبات في Odoo (ir.http). وعند كل طلب صفحة تقرر في جزء من الألف من الثانية ما إذا كان يجوز تقديم الصفحة من الذاكرة المؤقتة، ثم تقدمها دون قاعدة بيانات ودون قالب ودون تصيير.

مخطط انسيابي: الطلب، الفحص، مفتاح الذاكرة المؤقتة، الإصابة أو الإخفاق، الحفظ والتقديم

  1. الفحص: لا يُنظر إلا في طلب GET مجهول بلا معاملات بحث على مسار مسموح (المتجر والتصنيفات والمنتجات والمدونة). وكل ما عدا ذلك يمر عبر Odoo كالمعتاد.
  2. مفتاح الذاكرة المؤقتة: يتكوّن من الموقع وفئة المضيف واللغة والمسار وقائمة الأسعار والموقف الضريبي وحالة الموافقة على ملفات تعريف الارتباط. لذلك لا يتشارك الزوار الذين سيرون محتوى مختلفًا إدخالًا واحدًا أبدًا. ويُوحَّد المضيف في هذه الحالة: يكتب Odoo العناوين المطلقة دائمًا من نطاق الموقع لا من الطلب؛ أما عنوان الطلب فيحسم فقط ما إذا كانت الصفحة تُعد العنوان الرئيسي (الروابط اللغوية) وما إذا كان ينبغي فهرستها. ولذلك تتشارك كل أسماء المضيفين الغريبة إدخالًا واحدًا مع الإشارة noindex، بدلًا من أن يشغل كل منها نسخة خاصة.
  3. الإصابة: إذا وُجد إدخال حديث فإنه يُقدَّم. ويُعاد تعيين رمز CSRF في الصفحة لكل طلب. وتستمر مشاهدات مقالات المدونة في الاحتساب.
  4. الإخفاق: إذا لم يوجد الإدخال أو كان قديمًا، يُصيّر Odoo الصفحة كالمعتاد. وإذا كانت النتيجة قابلة للتخزين المؤقت (الحالة 200، وHTML، وبلا ملف تعريف ارتباط، وبلا معرّف جلسة في النص)، تُحفظ؛ ويكون الطلب التالي إصابة.
  5. ظاهر في الترويسة: تحمل كل استجابة الترويسة X-Page-Cache: HIT أو MISS. وهكذا يمكن التحقق بأي أداة مما حدث.

ما مدى الزيادة في السرعة؟

في نظام الاختبار لدينا (نسخة من مواقعنا، بضع مئات من الصفحات) بلغ متوسط زمن تصيير الصفحة نحو 490 جزءًا من الألف من الثانية، وبلغ التقديم من الذاكرة المؤقتة نحو 23 جزءًا من الألف من الثانية: أي نحو عشرين ضعفًا. وكلما كانت الصفحة أعقد زاد الكسب. كما تحسب لوحة المعلومات من القيمتين وقت الخادم الموفَّر تقديريًا.

ملف أم RAM: اختيار موقع التخزين

للذاكرة المؤقتة موقعا تخزين. وكلاهما مرئي بالاشتراك لجميع عمليات عمل Odoo، فكل صفحة موجودة مرة واحدة فقط لا مرة لكل عملية.

مقارنة بين ذاكرة الملفات المؤقتة وذاكرة RAM المؤقتة وقاعدة القرار في الوضع التلقائي

الإعدادأين توجد الصفحات؟الخصائص
ملفاتمجلد في مجلد بيانات Odoo، لكل قاعدة بياناتتبقى بعد إعادة التشغيل؛ ونظام التشغيل يحتفظ على أي حال بالصفحات كثيرة الاستخدام في الذاكرة
الذاكرة العاملةtmpfs تحت /dev/shmأسرع تقديم؛ تضيع عند إعادة تشغيل الخادم وتُبنى من جديد ببساطة
تلقائيRAM ما دام كل شيء يتسع فيها؛ وإلا فالملفاتتقرر مهمة صيانة (كل 10 دقائق) بناءً على التقدير؛ وتبقى على RAM عند «يتسع» و«بالكاد»، حتى لا يتغير الاختيار باستمرار

في معظم التثبيتات يكون تلقائي هو الخيار الصحيح: تحصلون على سرعة RAM عندما تتوفر المساحة، وإلا فتعودون إلى الملفات دون تدخل.

هل يتسع الموقع في الذاكرة العاملة؟ وكم من الذاكرة ينقص؟

يتوقف إمكان استخدام ذاكرة مؤقتة في RAM على ثلاثة أمور: عدد الصفحات ومتوسط حجمها والذاكرة المتاحة. وتحسب لوحة المعلومات ذلك لكم:

  • عدد الصفحات: تحصي لكل موقع المنتجات المنشورة وصفحات قوائم المتجر والتصنيفات ومقالات المدونة وقوائم المدونة، ثم تضرب في عدد اللغات.
  • حجم الصفحة: بمجرد وجود صفحات في الذاكرة المؤقتة يُقاس المتوسط الفعلي؛ وإلى ذلك الحين تُعتمد قيمة افتراضية.
  • المساحة المتاحة للذاكرة المؤقتة: أصغر قيمة من بين ميزانية RAM المضبوطة وحجم tmpfs ونصف الذاكرة العاملة المتاحة. فلا ينبغي أن يقع الخادم في ضائقة ذاكرة بسبب الذاكرة المؤقتة.
  • الحكم: «يتسع مع احتياطي» أو «بالكاد» أو «كبير جدًا» أو «ذاكرة RAM المؤقتة غير متاحة». ويسري «يتسع» عندما لا تتجاوز الحاجة 80 بالمئة من المساحة المتاحة.

قسم لوحة المعلومات هل يتسع في الذاكرة العاملة؟ مع عدد الصفحات لكل موقع والمساحة المطلوبة وبيان الذاكرة الإضافية اللازمة

جديد: كم من الذاكرة الإضافية يلزم؟

إذا لم تتسع الذاكرة المؤقتة، فإن المرء يريد أن يعرف ما الذي يجب تغييره. لذلك تذكر لوحة المعلومات تحت الحكم سطرًا محددًا: «ذاكرة RAM إضافية لذاكرة RAM مؤقتة: نحو … من الذاكرة العاملة الزائدة على هذا الخادم» – أو «لا شيء» إذا كانت المساحة كافية أصلًا. وإذا كان الصغير جدًا هو أحد الإعدادات لا الخادم، فيُذكر تحته أيّها: ميزانية RAM للوحدة أو حجم tmpfs (/dev/shm).

لوحة معلومات بميزانية RAM صغيرة جدًا: الحكم لا، والطلب برفع ميزانية RAM إلى القيمة المطلوبة على الأقل

الحساب وراء ذلك بسيط ويمكن تتبعه:

مثال حسابي: 12.000 صفحة × 25 KB تعطي حاجة نحو 300 MB، ومع الاحتياطي نحو 375 MB، ولذلك يلزم ما لا يقل عن 750 MB ذاكرة حرة

  1. الحاجة = الصفحات × متوسط حجم الصفحة.
  2. مع الاحتياطي = الحاجة مقسومة على 0,8. ويجب أن تتسع هذه القيمة في ميزانية RAM وفي tmpfs حتى يكون الحكم «يتسع».
  3. الذاكرة الحرة: بما أن الذاكرة المؤقتة لا يجوز أن تستخدم أكثر من نصف الذاكرة العاملة المتاحة، يحتاج الخادم إلى ضعف قيمة الخطوة 2 على الأقل بوصفها ذاكرة حرة متاحة. وإذا نقص شيء، فالفرق هو الذاكرة الإضافية اللازمة.

المثال في الصورة (12.000 صفحة بحجم 25 KB لكل منها) وسيلة مساعدة للحساب وليس قياسًا لصفحاتنا. وللمواقع الصغيرة تكفي بضع عشرات من الميغابايت؛ وقد اكتفت بيانات المثال في لقطات الشاشة بنحو 13 MB.

للتقييم الصحيح: التقدير لا يحتسب نسخًا إضافية بحسب قائمة الأسعار أو البلد. ومن يستخدم الكثير منها فليخطط لبعض الاحتياطي. ثم إن ميزانية RAM الصغيرة جدًا هي السبب الأكثر شيوعًا لبقاء الوضع التلقائي على الملفات – لا نقص الذاكرة العاملة. وتعرض لوحة المعلومات في هذه الحالة هذا السطر تحديدًا.

التغييرات والترجمات تنظّف الذاكرة المؤقتة

لا تصلح الذاكرة المؤقتة إلا إذا لم تُقدّم صفحات قديمة أبدًا. وحدّ زمني بحت («تجاهل كل اثنتي عشرة ساعة») سيكون فظًا جدًا: فالسعر المتغير أو الخطأ المطبعي المصحَّح سينتظر حتى اثنتي عشرة ساعة. لذلك تعمل الوحدة بحسب المحتوى.

مسار الإبطال: تغيير، مشغّل قاعدة بيانات، دفتر تغييرات، مطابقة، إهمال الصفحة، تصيير جديد عند الطلب التالي

  1. مشغّلات قاعدة البيانات: على جميع الجداول التي قد تؤثر في صفحة (المنتجات والمتغيرات والصور والمخزون والسمات والتصنيفات والأسعار والضرائب وقوائم الأسعار ومقالات المدونة والوسوم وبيانات الشركاء والشركات والعروض والأصول والقوائم واللغات وإعدادات الموقع) توجد مشغّلات PostgreSQL. وهي تسجّل كل تغيير في دفتر تغييرات.
  2. الاعتماديات وحالة قاعدة البيانات: تتذكر كل صفحة مخزنة مؤقتًا السجلات التي تعرضها وحالة قاعدة البيانات التي أُنشئت بها.
  3. المطابقة: إذا وُجد سجل في الدفتر نشأ بعد هذه الحالة ويخص أحد هذه السجلات، فالصفحة قديمة.
  4. التخزين المؤقت من جديد: عند الطلب التالي تُهمل الصفحة القديمة وتُصيَّر من جديد وتُحفظ مجددًا.

الترجمات مشمولة أيضًا

يخزّن Odoo 19 النصوص المترجمة في السجل نفسه الذي يحوي النص الأصلي (كحقل JSON). فالترجمة المتغيرة هي بالنسبة إلى قاعدة البيانات تغيير عادي في صف – والمشغّل يراه. وينطبق ذلك بالقدر نفسه على التحرير عبر الواجهة، وعلى الاستيراد، وعلى الواجهات البرمجية، وعلى السكربتات التي تكتب مباشرة في قاعدة البيانات. وهكذا فإن ترجمة آلية إلى 46 لغة تُبطل بالضبط الصفحات التي تغيّر نصها، ولا تُبطل غيرها.

  • بدقة لا بشمول: المنتج المتغيّر يُبطل صفحاته والقوائم التي يرد فيها والتصنيف التابع له. ويبقى الباقي في الذاكرة المؤقتة.
  • التغييرات العامة (القوالب والأصول واللغات والقوائم والضرائب والعملات) تُبطل كل شيء دفعة واحدة، لأنها قد تؤثر في كل صفحة.
  • العدّادات خارج الحساب: يتغير عدّاد مشاهدات مقالات المدونة عند كل زيارة؛ وهو عمدًا لا يسبب إبطالًا، وإلا لصارت الذاكرة المؤقتة بلا فائدة للمقالات الشائعة.
  • شبكة أمان: بالإضافة إلى ذلك يوجد عمر أقصى لكل صفحة (الافتراضي 12 ساعة).
  • لا خطأ كتابة بسبب الذاكرة المؤقتة: يُسجَّل الخطأ داخل المشغّل تحذيرًا ولا يُفشل عملية الحفظ الفعلية.

لوحة المعلومات والإحصاءات

كل ما تحتاجونه للتشغيل في مكان واحد: في Odoo تحت الموقع → التقارير → ذاكرة الصفحات المؤقتة. القسم نظرة عامة هو لوحة المعلومات (مع الإعدادات)، والقسم السجل يعرض الأرقام لكل يوم ولكل موقع.

لوحة معلومات ذاكرة الصفحات المؤقتة في Odoo: الإعدادات والحالة والإحصاءات وفحص هل يتسع في الذاكرة العاملة

لقطة شاشة من نظام اختبار بنسخ من مواقعنا؛ استُبدلت أسماء المواقع بأسماء بديلة.

الإعدادات

الإعدادالمعنى
نشطالمفتاح الرئيسي. عند إيقافه يقدّم Odoo كل صفحة كما كان سابقًا، في جميع العمليات بعد 30 ثانية على الأكثر.
موقع التخزينتلقائي أو ملفات أو ذاكرة عاملة
العمر الأقصى (ساعات)شبكة أمان؛ تُجدَّد الصفحات بعد هذه المدة بصرف النظر عن التغييرات
ميزانية RAM (MB)هذا أقصى ما يجوز أن تشغله ذاكرة RAM المؤقتة من الذاكرة العاملة؛ وهي في الوقت نفسه الحد للحكم «يتسع»
حد القرص (MB)أقصى حجم لذاكرة الملفات المؤقتة؛ وتُزال أقدم الإدخالات أولًا

الحالة والإحصاءات

تعرض الحالة موقع التخزين النشط مع حدّه، وعدد الصفحات المخزنة مؤقتًا وحجمها، وتتبّع التغييرات: كم تغييرًا سُجّل خلال الساعات الـ24 الأخيرة وكم جدولًا يُراقَب. وإذا غابت المراقبة، تحذّر لوحة المعلومات بوضوح، إذ لا يجوز عندها الوثوق بالذاكرة المؤقتة. وتتيح الأزرار في الأعلى تنفيذ الصيانة فورًا، أو إفراغ الذاكرة المؤقتة، أو فحص المشغّلات وإعادة إنشائها عند الحاجة.

تتضمن الإحصاءات (اليوم، 7 أيام، 30 يومًا) ما يلي:

  • من الذاكرة المؤقتة ومُصيَّر: الإصابات والإخفاقات، ومنها معدل الإصابة
  • أُزيل (تغيّر/انتهت صلاحيته): كم صفحة أُهملت بسبب التغيير أو انتهاء المدة
  • زمن التصيير وزمن الذاكرة المؤقتة: المتوسط لكل صفحة مقارنةً
  • وقت الخادم الموفَّر تقديريًا وحجم البيانات من الذاكرة المؤقتة

تجمع كل عملية عمل الأرقام لنفسها وتكتبها مرة في الدقيقة؛ وتزيل مهمة الصيانة الصفوف الأقدم من 90 يومًا.

السجل كمخطط بياني وجدول محوري وقائمة

تحت السجل تتوفر القيم اليومية لكل موقع – كمخطط بياني أو كجدول محوري أو كقائمة. وهكذا ترون ما إذا كان معدل الإصابة يرتفع من جديد بعد إعادة التشغيل أو بعد تغيير كبير، وأي موقع يتلقى أكبر حركة من الذاكرة المؤقتة.

سجل ذاكرة الصفحات المؤقتة كجدول محوري مع الإصابات والإخفاقات والصفحات المهملة لكل موقع

الأمان: ما لا يُقدَّم أبدًا من الذاكرة المؤقتة

يجب ألا تؤدي ذاكرة الصفحات المؤقتة أبدًا إلى أن يرى أحدٌ محتوى غيره. لذلك تعمل الوحدة بمبدأ: عند الشك لا تُخزّن مؤقتًا.

  • الزوار المجهولون فقط: من سجّل الدخول أو لديه سلة أو يحمل أي حالة جلسة أخرى يحصل دائمًا على الصفحة المُصيَّرة عاديًا.
  • طلبات GET بلا معاملات بحث فقط: تبقى عمليات البحث والمرشحات والفرز والنماذج والسلة والدفع دون مساس.
  • الحالة 200 وHTML فقط: لا تُحفظ صفحات الأخطاء ولا عمليات إعادة التوجيه ولا الملفات.
  • لا معرّفات جلسات في الذاكرة المؤقتة: الصفحة التي تحتوي على معرّف جلسة أو تضبط ملف تعريف ارتباط لا تُحفظ (وتُسجَّل تحذيرًا).
  • رمز CSRF لكل طلب: الرمز في الصفحة المخزنة مؤقتًا عنصر نائب، ويُدرَج من جديد عند كل تقديم.
  • مفتاح دقيق: الموقع واللغة وقائمة الأسعار والموقف الضريبي والموافقة على ملفات تعريف الارتباط جزء من مفتاح الذاكرة المؤقتة؛ ومن يرى محتوى مختلفًا يحصل على إدخال آخر.
  • قواعد بيانات متعددة: لكل قاعدة بيانات إدخالاتها ودفتر تغييراتها وإحصاءاتها الخاصة.
  • لا تسرّب للبيانات: الذاكرة المؤقتة محلية على الخادم (ملف أو RAM). ولا تُنقل أي بيانات إلى أطراف ثالثة.

محركات البحث وفهرسات الذكاء الاصطناعي: لا شيء يُحظر

يرد بعض المشغّلين على حِمل الزواحف بالحظر. وهذا يحمي الخادم لكنه يكلّف الظهور. وتسلك الوحدة الطريق المعاكس:

  • محتوى واحد للجميع: تحصل محركات البحث وفهرسات الذكاء الاصطناعي والزوار على الصفحة نفسها. ولا توجد «نسخة للزواحف» ولا تمييز بحسب معرّف المتصفح.
  • الاستجابات الأسرع تفيد الفهرسة: الصفحة التي تستجيب في 20 جزءًا من الألف من الثانية بدل 500 تثقل ميزانية الزحف (crawl budget) أقل، ويستطيع الزواحف تغطية صفحات أكثر في الوقت نفسه.
  • محتوى حديث: ولأن التغييرات تُبطل الصفحات فورًا، لا ترى الزواحف نسخة قديمة أبدًا – وهذا مهم إذا كنتم تعتنون بمحتوى للبحث ولإجابات الذكاء الاصطناعي.
  • البيانات المنظّمة محفوظة: JSON-LD والبيانات الوصفية وروابط hreflang جزء من الصفحة المخزنة مؤقتًا؛ أما خرائط الموقع والملفات فلا تمسّها الذاكرة المؤقتة.

وإذا أردتم تقييد الحِمل إضافةً إلى ذلك، فهذا قرار منفصل يمكنكم اتخاذه عن قصد – والوحدة لا تفرضه عليكم.

تصغير HTML وتقديمه مضغوطًا

لا توفّر الذاكرة المؤقتة زمن الحساب فحسب، بل حجم البيانات أيضًا. فالوحدة تصغّر HTML قبل حفظه، وتقدّمه مضغوطًا عندما يعرض المتصفح أو الزاحف ذلك:

  • التصغير (المعامل website_page_cache.minify): تُحذف تعليقات HTML وتُدمج المسافات البيضاء. ولا تُزال كليًا إلا حيث يتجاهلها المتصفح على أي حال، كما بين عناصر الكتلة. وتبقى المسافات بين العناصر السطرية، وتبقى pre وtextarea والسكربتات دون تغيير، وتُعاد كتابة البيانات المنظّمة (JSON-LD) بشكل مضغوط. وبحسب الصفحة تصغر الصفحات بنسبة 10 إلى 30 %. وفي الاختبار على سبع صفحات حقيقية كان النص وعدد العناصر وموضع جميع العناصر ولقطة الشاشة مطابقة للأصل. والتقديم الأول (MISS) مصغَّر تمامًا كأي تقديم لاحق (HIT).
  • الضغط (المعامل website_page_cache.compress): تخرج الصفحات من الذاكرة المؤقتة بصيغة gzip (Content-Encoding: gzip، Vary: Accept-Encoding). أما حزم الأصول الكبيرة (CSS وJavaScript، حتى بضعة MB) فيقدّمها Odoo نفسه دون ضغط؛ وتضغطها الوحدة مرة واحدة وتحفظ النسخة على القرص ثم تقدّمها مباشرة. وهكذا صار 2,1 MB من CSS مقدار 0,27 MB، و4,8 MB من JavaScript مقدار 1,1 MB. وتزيل مهمة الصيانة النسخ القديمة.
  • بعد إعادة تشغيل الحاسوب: تبقى ذاكرة RAM المؤقتة عند إعادة تشغيل Odoo، لكن ليس عند إعادة تشغيل الخادم. لذلك تعكسها مهمة الصيانة تدريجيًا على القرص (المعامل website_page_cache.persist) وتستعيدها عند البدء. وما إذا كان الإدخال المستعاد لا يزال صالحًا تفحصه الآلية نفسها المعتادة: العمر ودفتر التغييرات. ولا يُعاد حساب التصغير في هذه الحالة.

التثبيت والإعدادات

  1. الحصول على الوحدة: نزّلوا الشيفرة المصدرية من GitHub وضعوها في مسار addons لتثبيت Odoo 19 لديكم: github.com/Alex0176/odoo-website-page-cache
  2. التثبيت: odoo-bin -d <Datenbank> -i website_page_cache --stop-after-init. وبذلك يُنشأ دفتر التغييرات والمشغّلات ومهمة الصيانة (كل 10 دقائق).
  3. أعيدوا تشغيل الخدمة كي تحمّل جميع عمليات العمل الوحدة.
  4. افتحوا لوحة المعلومات: الموقع → التقارير → ذاكرة الصفحات المؤقتة. تحققوا من اكتمال تتبّع التغييرات، واختاروا موقع التخزين (الافتراضي: تلقائي).
  5. التحقق: اطلبوا صفحة متجر أو مدونة مرتين وانظروا إلى الترويسة X-Page-Cache: في المرة الأولى MISS، وبعدها HIT.

توجد الإعدادات بوصفها معاملات نظام (website_page_cache.enabled، .backend، .ttl_hours، .max_mb_file، .max_mb_ram) وتُدار عادةً في لوحة المعلومات. والوحدة مترجمة إلى الألمانية. وإلغاء التثبيت يزيل المشغّلات والدفتر وكل الصفحات المخزنة مؤقتًا إزالة كاملة.

نصيحة لذاكرة RAM المؤقتة: يجب أن تناسب ميزانية RAM في لوحة المعلومات وحجم tmpfs (/dev/shm، خيار الربط size=) الحاجةَ. ويذكر لكم فحص «هل يتسع في الذاكرة العاملة؟» كليهما بقيم محددة.

حدود ينبغي معرفتها

  • تأخير قصير بعد التغييرات: يُحدَّث فهرس دفتر التغييرات كل ثانيتين. وقد تُقدَّم الصفحة المتغيرة حتى ذلك الحين بنسختها القديمة.
  • النصوص المعتمدة على المخزون تُحدَّث عبر تغييرات المخزون والعمر الأقصى.
  • تقدير المساحة المطلوبة: لا تُحتسب النسخ الإضافية لكل قائمة أسعار أو بلد؛ خططوا لبعض الاحتياطي.
  • ليست بديلًا عن كل شيء: تخفف الذاكرة المؤقتة العبء عن الطلبات التي يجوز لها خدمتها. أما المستخدمون المسجلون ومحركات البحث الداخلية والنماذج فتمر عبر Odoo كالمعتاد.
  • الطلب الأول يبقى بطيئًا: بعد إعادة تشغيل الخادم (RAM) أو بعد تغيير عام تُصيَّر كل صفحة مرة واحدة عاديًا قبل أن تصبح في الذاكرة المؤقتة.

الأسئلة الشائعة

ما هي ذاكرة الصفحات المؤقتة لـ Odoo؟

وحدة مفتوحة المصدر (website_page_cache، Odoo 19، LGPL-3) تقدّم صفحات المتجر والمدونة العامة للزوار المجهولين من ذاكرة مؤقتة بدل تصييرها من جديد عند كل طلب. وتوجد الذاكرة المؤقتة بحسب الاختيار في ملفات أو في الذاكرة العاملة.

هل تحظر الوحدة محركات البحث أو زواحف الذكاء الاصطناعي؟

لا. تحصل محركات البحث وفهرسات الذكاء الاصطناعي على الصفحات نفسها التي يحصل عليها أي زائر آخر، لكن بسرعة أكبر. لا يوجد حظر ولا تبطيء ولا نسخة خاصة بالزواحف.

هل تُخزَّن الصفحات والترجمات المتغيرة مؤقتًا من جديد تلقائيًا؟

نعم. تبلّغ مشغّلات PostgreSQL دفترًا بكل تغيير في الجداول ذات الصلة؛ وتُهمل الصفحات المتأثرة وتُصيَّر من جديد وتُحفظ عند الطلب التالي. والترجمات مشمولة لأن Odoo 19 يخزّنها في السجل نفسه.

هل أختار ملفًا أم RAM؟

عادةً تلقائي: تستخدم الوحدة RAM ما دامت جميع الصفحات تتسع فيها، وإلا فتلجأ إلى الملفات. وتناسب الملفات حين ينبغي أن تبقى الذاكرة المؤقتة بعد إعادة التشغيل أو حين تكون RAM شحيحة؛ وRAM هي الخيار الأسرع.

كيف أعرف ما إذا كان موقعي يتسع في الذاكرة العاملة؟

في لوحة المعلومات تحت الموقع → التقارير → ذاكرة الصفحات المؤقتة. يحصي القسم «هل يتسع في الذاكرة العاملة؟» الصفحات لكل موقع ولغة، ويقيس حجم الصفحة، ويقارن الحاجة بميزانية RAM وحجم tmpfs والذاكرة المتاحة.

كم من الذاكرة الإضافية يلزم لذاكرة RAM مؤقتة؟

تذكرها لوحة المعلومات في سطر مستقل. والحساب: الحاجة = الصفحات × حجم الصفحة؛ مع احتياطي أمان مقسومة على 0,8. وبما أن الذاكرة المؤقتة لا يجوز أن تستخدم أكثر من نصف الذاكرة المتاحة، فإن ضعف ذلك هو الذاكرة الحرة المطلوبة؛ والفرق هو الذاكرة الإضافية. وإذا كانت ميزانية RAM أو tmpfs وحدهما صغيرتين جدًا، فإن لوحة المعلومات تذكر الإعداد مع قيمته المستهدفة.

هل يمكن للذاكرة المؤقتة أن تُري أحدًا محتوى غيره؟

لا. لا يُخزَّن مؤقتًا إلا لطلبات GET المجهولة التي لا تحتوي على معاملات بحث. أما المستخدمون المسجلون والسلال والنماذج وعمليات البحث فلا تأتي أبدًا من الذاكرة المؤقتة؛ واللغة وقائمة الأسعار والموقف الضريبي والموافقة على ملفات تعريف الارتباط جزء من المفتاح.

كيف أوقف الذاكرة المؤقتة في حالة الطوارئ؟

أوقفوا في لوحة المعلومات مفتاح «نشط» أو اضبطوا معامل النظام website_page_cache.enabled على 0. ويسري ذلك في جميع عمليات العمل بعد 30 ثانية على الأكثر. كما يزيل إلغاء التثبيت المشغّلات والدفتر والصفحات المخزنة مؤقتًا.

كيف أعرف ما إذا كانت صفحة قد جاءت من الذاكرة المؤقتة؟

من ترويسة الاستجابة X-Page-Cache: القيمة HIT تعني من الذاكرة المؤقتة، والقيمة MISS تعني مُصيَّرة حديثًا ومحفوظة.

هل تصغّر الوحدة HTML وتضغطه؟

نعم. تُصغَّر الصفحات المخزنة مؤقتًا بحذر (تُحذف التعليقات والمسافات الزائدة ويبقى المحتوى والمظهر كما هما) وتُقدَّم بصيغة gzip عند إصابات الذاكرة المؤقتة؛ وتُضغط حزم الأصول مرة واحدة وتُقدَّم من القرص. ويمكن إيقاف كليهما عبر المعاملين website_page_cache.minify وwebsite_page_cache.compress.

الدعم من Biricon IT Services

هل يستجيب موقع Odoo لديكم ببطء عند حِمل الزواحف، أم تريدون جعل المتجر والمدونة أسرع وأكثر ظهورًا؟ نحن ندعمكم في تحليل الحِمل، وفي إعداد ذاكرة الصفحات المؤقتة، وفي تحديد أحجام الذاكرة العاملة وعمليات العمل، وفي تحسين محركات البحث متعدد اللغات لموقع Odoo الخاص بكم. وتجدون الشيفرة المصدرية للوحدة على GitHub.

تواصلوا معنا الآن

الحالة بتاريخ 10 نوفمبر 2026. القيم المقيسة مأخوذة من نظام اختبار ببيانات نموذجية، وليست التزامًا بالنسبة إلى تثبيتات أخرى.