الاثنين 9 ديسمبر 2024
موضوعنا اليوم هو التخزين المؤقت.
توسّعت شبكة الإنترنت بمرور السنين، ما أدى إلى زيادة في عدد عمليات الزحف التي يُجريها محرّك بحث Google. مع أنّ البنية الأساسية للزحف على Google متوافقة مع آليات التخزين المؤقت الإرشادي، وقد كانت دائمًا كذلك، انخفض عدد الطلبات التي يمكن عرضها من ذاكرات التخزين المؤقت المحلية: منذ 10 سنوات، كانت 0.026% من إجمالي عمليات الجلب قابلة للتخزين المؤقت، وهي نسبة ليست مشجّعة، لكنّها انخفضت أكثر وأصبحت الآن 0.017%.
ما أهمية التخزين المؤقت؟
التخزين المؤقت هو جزء أساسي من مجموعة الأجزاء التي تشكّل شبكة الإنترنت. يتيح التخزين المؤقت تحميل الصفحات بلمح البصر عند معاودة زيارتها، ما يساهم في توفير موارد الحوسبة، وبالتالي الموارد الطبيعية، بالإضافة إلى توفير مقدار هائل من معدل نقل البيانات المُكلِف لدى كل من العملاء والخوادم.
على وجه الخصوص، في المواقع الإلكترونية الكبيرة الحجم التي نادرًا ما يتم فيها إجراء تغييرات على المحتوى ضمن عناوين URL الفردية، يمكن أن تساهم إتاحة التخزين المؤقت محليًا في أن يتم الزحف إلى الموقع بشكل أكثر كفاءة. تتيح البنية الأساسية للزحف في Google التخزين المؤقت الإرشادي عبر HTTP كما هو محدّد وفق معيار التخزين المؤقت عبر HTTP، وتحديدًا من خلال عنوان الاستجابة الذي يتضمّن ETag
وعنوان الطلب الذي يتضمّن If-None-Match
، ومن خلال عنوان الاستجابة الذي يتضمّن Last-Modified
وعنوان الطلب الذي يتضمّن If-Modified-Since
.
ننصح بشدة باستخدام السمة ETag
لأنّها أقل عرضة للأخطاء والمشاكل (فقيمتها غير منظَّمة، بعكس قيمة السمة Last-Modified
). وعند الإمكان، ننصحكم بتوفير كِلتا السمتين، لأنّ ذلك قد يكون أكثر فائدة.
بالنسبة إلى التغييرات التي تعتقدون أنّها تتطلّب من العملاء إعادة تحميل ذاكرات التخزين المؤقت، الأمر يعود إليكم. ننصحكم بأن تطلبوا منهم إعادة تحميل ذاكرة التخزين المؤقت عندما تُجرون تغييرات مهمة على المحتوى، لكن إذا عدّلتم تاريخ حقوق الطبع والنشر في أسفل الصفحة مثلاً، لا يُعدّ ذلك تغييرًا مهمًا على الأرجح.
ETag
وIf-None-Match
تتيح برامج الزحف من Google استخدام طلبات مشروطة تستند إلى ETag
، كما هو محدّد بالضبط وفق معيار التخزين المؤقت عبر HTTP.
بعبارة أخرى، لإطلاع برامج الزحف من Google على تفضيلاتكم بشأن التخزين المؤقت، يجب ضبط القيمة Etag
على أي سلسلة ASCII عشوائية (يمكن أن تكون جزءًا من المحتوى أو رقم إصدار أو جزءًا من π، كما تشاؤون)، شرط أن تكون القيمة فريدة لتمثيل المحتوى المستضاف على عنوان URL الذي يتم الوصول إليه.
على سبيل المثال، في حال استضافة نُسخ مختلفة من المحتوى نفسه على عنوان URL نفسه (مثلاً نسخة مخصّصة لأجهزة الكمبيوتر وأخرى مخصّصة للأجهزة الجوّالة)، يمكن استخدام قيمة ETag
فريدة في كل نسخة.
إنّ برامج الزحف من Google التي تتيح التخزين المؤقت سترسل القيمة ETag
التي تم عرضها نتيجة عملية زحف سابقة إلى عنوان URL في If-None-Match header
. إذا كانت قيمة ETag
التي أرسلها الزاحف مطابقة للقيمة الحالية التي أنشأها الخادم، من المفترض أن يعرض الخادم الرمز 304
لحالة HTTP (لم يتم التعديل) بدون نص HTTP. ومن المهم ألّا يتم عرض نص HTTP للسببين التاليين:
- لن يحتاج الخادم إلى استهلاك موارد الحوسبة لإنشاء المحتوى الفعلي، ما يؤدي إلى أن توفّروا المال
- لن يحتاج الخادم إلى نقل نص HTTP، ما يؤدي أيضًا إلى أن توفّروا المال
من جهة العميل، مثلاً متصفح المستخدم أو Googlebot، يتم استرداد المحتوى المدرَج على عنوان URL المطلوب من ذاكرة التخزين المؤقت الداخلية لدى العميل. وبما أنّه لن يتم نقل أي بيانات، تحدث هذه العملية بلمح البصر، ما يعزّز رضا المستخدمين وقد يساهم أيضًا في توفير بعض الموارد لديهم.
Last-Modified
وIf-Modified-Since
كما هي الحال بالنسبة إلى السمة ETag
، تتيح برامج الزحف من Google استخدام طلبات مشروطة تتضمّن السمة Last-Modified based
أيضًا، كما هو محدّد بالضبط وفق معيار التخزين المؤقت عبر HTTP. وتعمل هذه السمة بالطريقة نفسها كالسمة ETag
من منظور دلالي، أي أنّه يتم استخدام معرّف لتحديد ما إذا كان المورد قابلاً للتخزين مؤقتًا، وتوفّر المزايا نفسها كالسمة ETag
من جهة العميل.
مع ذلك، إليكم بعض النصائح التي يجب الالتفات إليها عند استخدام Last-Modified
كتوجيه للتخزين المؤقت:
-
يجب أن يكون تنسيق التاريخ في العنوان الذي يتضمّن
Last-Modified
متوافقًا مع معيار HTTP. لتجنُّب حدوث أي مشاكل متعلّقة بالتحليل، ننصح باستخدام التنسيق التالي للتاريخ: "اليوم من الأسبوع، DD Mon YYYY HH:MM:SS المنطقة الزمنية". مثلاً: "Fri, 4 Sep 1998 19:15:56 GMT". -
مع أنّ ضبط الحقل
max-age
في العنوان الذي يتضمّنCache-Control
ليس شرطًا، ننصحكم بضبطه لمساعدة برامج الزحف على معرفة الوقت المناسب لإعادة الزحف إلى عنوان URL المحدّد. اضبطوا قيمة الحقلmax-age
على عدد الثواني المتوقّع ألّا يتغيّر المحتوى خلالها. مثلاً:Cache-Control: max-age=94043
.
أمثلة
أدرك أنّه قد يكون من الصعب فهم طريقة عمل التخزين المؤقت الإرشادي، إلّا أنّ الاطّلاع على مثال على سلاسل الطلبات والاستجابات قد يساهم في توضيح طريقة العمل. في ما يلي سلسلتان، واحدة لـ ETag
/If-None-Match
والأخرى لـ Last-Modified
/If-Modified-Since
، لتوضيح طريقة العمل المفترَضة:
ETag /If-None-Match |
Last-Modified /If-Modified-Since |
|
---|---|---|
استجابة الخادم لعملية زحف: هي الاستجابة التي تتيح للزاحف حفظ الحقلين ETag وLast-Modified اللذين يحدّدان الشروط المسبقة ضمن العنوان.
|
HTTP/1.1 200 OK Content-Type: text/plain Date: Fri, 4 Sep 1998 19:15:50 GMT ETag: "34aa387-d-1568eb00" ... |
HTTP/1.1 200 OK Content-Type: text/plain Date: Fri, 4 Sep 1998 19:15:50 GMT Last-Modified: Fri, 4 Sep 1998 19:15:56 GMT Cache-Control: max-age=94043 ... |
طلب مشروط لاحق للزاحف: يستند الطلب المشروط إلى قيم الشروط المسبقة ضمن العنوان والتي تم حفظها من طلب سابق. تتم إعادة إرسال القيم إلى الخادم لتأكيدها في عناوين الطلبات التي تتضمن If-None-Match وIf-Modified-Since .
|
GET /hello.world HTTP/1.1 Host: www.example.com Accept-Language: en, hu User-Agent: Googlebot/2.1 (+http://www.google.com/bot.html) If-None-Match: "34aa387-d-1568eb00" ... |
GET /hello.world HTTP/1.1 Host: www.example.com Accept-Language: en, hu User-Agent: Googlebot/2.1 (+http://www.google.com/bot.html) If-Modified-Since: Fri, 4 Sep 1998 19:15:56 GMT ... |
استجابة الخادم للطلب المشروط: بما أنّه تم التأكد من جهة الخادم من صحة قيم الشروط المسبقة ضمن العنوان والتي أرسلها الزاحف، يعرض الخادم للزاحف الرمز 304 لحالة HTTP (بدون نص HTTP). يحدث ذلك لكل الطلبات اللاحقة إلى أن يتعذر التأكد من صحة الشروط المسبقة (يتغيّر تاريخ ETag أو Last-Modified من جهة الخادم).
|
HTTP/1.1 304 Not Modified Date: Fri, 4 Sep 1998 19:15:50 GMT Expires: Fri, 4 Sep 1998 19:15:52 GMT Vary: Accept-Encoding If-None-Match: "34aa387-d-1568eb00" ... |
HTTP/1.1 304 Not Modified Date: Fri, 4 Sep 1998 19:15:50 GMT Expires: Fri, 4 Sep 1998 19:15:51 GMT Vary: Accept-Encoding If-Modified-Since: Fri, 4 Sep 1998 19:15:56 GMT ... |
إذا كنتم تودّون تعزيز رضا المستخدمين وتوفير بعض المال من خلال خفض تكلفة الاستضافة، ننصحكم باستشارة المستضيف أو مزوّد نظام إدارة المحتوى (CMS) أو المطوّرين بشأن كيفية تفعيل التخزين المؤقت عبر HTTP لمواقعكم، لأنّ ذلك سيعود بالفائدة على المستخدمين.
إذا أردتم الدردشة بشأن التخزين المؤقت، ما عليكم سوى الانتقال إلى منتدى المساعدة الخاص بـ "مجموعة خدمات بحث Google"، وإذا كانت لديكم ملاحظات بشأن طريقة التخزين المؤقت لدينا، يمكنكم إرسالها من خلال مستنداتنا المتعلّقة بالتخزين المؤقت والتي نشرناها في الوقت نفسه مع منشور المدوّنة هذا.