إدارة سلوك ذاكرة التخزين المؤقت

تستخدم Firebase Hosting شبكة توصيل محتوى (CDN) عالمية فعّالة لجعل موقعك الإلكتروني سريعًا بقدر الإمكان.

يتم تخزين أي محتوى ثابت مطلوب تلقائيًا في ذاكرة التخزين المؤقت على شبكة توصيل المحتوى (CDN). في حال إعادة نشر محتوى موقعك الإلكتروني، يعمل Firebase Hosting تلقائيًا على محو كل المحتوى المخزّن مؤقتًا في شبكة توصيل المحتوى إلى أن يتم تقديم الطلب التالي.

ومع ذلك، بما أنّ خدمات Cloud Functions وCloud Run تنشئ محتوًى ديناميكيًا، يمكن أن يختلف محتوى عنوان URL معيّن استنادًا إلى عوامل مثل مدخلات المستخدم أو هويته. ولمعالجة هذه المشكلة، لا يتم تخزين الطلبات التي تتم معالجتها من خلال رمز الخلفية مؤقتًا في شبكة توصيل المحتوى (CDN) تلقائيًا.

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

يمكنك أيضًا ضبط سلوك التخزين المؤقت لتقليل تكاليف تنفيذ الدوالّ المحتملة لأنّ المحتوى يتم عرضه من شبكة توصيل المحتوى بدلاً من دالة يتم بدء تشغيلها. يمكنك الاطّلاع على مزيد من المعلومات عن تحسين تنفيذ الدوالّ والخدمات في مستندات Cloud Functions و Cloud Run.

ويُستثنى من ذلك الطلبات التي تعرض أخطاء 404. تخزِّن شبكة CDN الردّ 404 لخدمتك على عنوان URL غير متوفّر لمدة 10 دقائق، وذلك لكي يتم عرض الطلبات اللاحقة لعنوان URL هذا خارج شبكة CDN. إذا غيّرت الخدمة ليصبح المحتوى متوفّرًا الآن على عنوان URL هذا، يواصل نظام CDN عرض أي رسائل خطأ 404 مخزّنة مؤقتًا لمدة 10 دقائق (على الأكثر)، ثم يعرض المحتوى من عنوان URL هذا بشكلٍ طبيعي.

إذا كان استجابة 404 يتضمّن رؤوس التخزين المؤقت التي ضبطتها خدمة Cloud Functions أو Cloud Run، ستلغي هذه الرؤوس المدة التلقائية التي تبلغ 10 دقائق وتحدّد تمامًا سلوك التخزين المؤقت لشبكةcdn.

اطّلِع على مزيد من المعلومات حول سلوك التخزين المؤقت في مستندات مطوّري الويب من Google.

ضبط Cache-Control

الأداة الرئيسية التي تستخدمها لإدارة ذاكرة التخزين المؤقت للمحتوى الديناميكي هي عنوان Cache-Control. من خلال ضبط هذا العنوان، يمكنك إبلاغ كل من المتصفّح وشبكة توصيل المحتوى (CDN) بمدة تخزين المحتوى في ذاكرة التخزين المؤقت. في الدالة، يمكنك ضبط Cache-Control على النحو التالي:

res.set('Cache-Control', 'public, max-age=300, s-maxage=600');

في مثال العنوان هذا، تُنفِّذ التوجيهات ثلاثة إجراءات:

  • public: يضع علامة على ذاكرة التخزين المؤقت public. وهذا يعني أنّه يمكن للمتصفّح و الخوادم الوسيطة (أي شبكة توصيل المحتوى (CDN) لموقع Firebase Hosting) تخزين محتوى الويب في ذاكرة التخزين المؤقت.

  • max-age: يُستخدم هذا المقياس لإعلام المتصفّح وشبكة توصيل المحتوى (CDN) بعدد الثواني التي يمكنهم فيها تخزين المحتوى مؤقتًا. عند انتهاء الوقت المحدّد، على المتصفّح وشبكة توصيل المحتوى إعادة التحقّق من صحة المحتوى مع خادم المصدر. في مثال العنوان، نسمح للمتصفّح وشبكة CDN بتخزين المحتوى مؤقتًا لمدة خمس دقائق (اطّلِع على s-maxage أدناه للاطّلاع على عناصر التحكّم المحدّدة لتخزين المحتوى مؤقتًا في شبكة CDN).

  • s-maxage: تلغي توجيه max-age لميزة التخزين المؤقت في شبكة توصيل المحتوى فقط، وتُعلم شبكة توصيل المحتوى بعدد الثواني التي يمكنها خلالها تخزين المحتوى مؤقتًا. عند انتهاء المهلة المحدّدة، يجب أن تعيد شبكة CDN التحقّق من صحة المحتوى مع خادم المصدر. في مثال العنوان، يتم إلغاء الإعداد max-age لشبكة CDN فقط والسماح لشبكة CDN بتخزين المحتوى مؤقتًا لمدة عشر دقائق.

بالنسبة إلى max-age وs-maxage، اضبط قيمهما على أطول مدة يناسبك أن يتلقّى المستخدمون خلالها محتوى قديمًا. إذا كانت الصفحة تتغيّر كل بضع ثوانٍ، استخدِم قيمة زمنية صغيرة. ومع ذلك، يمكن تخزين أنواع أخرى من المحتوى بأمان في ذاكرة التخزين المؤقت لعدة ساعات أو أيام أو حتى شهور.

يمكنك الاطّلاع على مزيد من المعلومات حول عنوان Cache-Control على Mozilla Developer Network ومستندات Google الخاصة بمطوّري الويب.

متى يتم عرض المحتوى المخزّن مؤقتًا؟

يخزّن المتصفّح وشبكة توصيل المحتوى (CDN) المحتوى الخاص بك استنادًا إلى ما يلي:

  • اسم المضيف
  • المسار
  • سلسلة طلب البحث
  • محتوى عناوين الطلب المحدّدة في عنوان Vary

عناوين Vary

يحدِّد Vary header رؤوس الطلبات التي يجب استخدامها لتقديم استجابة مناسبة (سواء كان المحتوى المخزّن مؤهّلاً أو يجب إعادة التحقّق من صلاحيته مع خادم المصدر).

تضبط Firebase Hosting تلقائيًا عنوان Vary مناسبًا في ردّك على المواقف الشائعة. في معظم الأحيان، ليس عليك القلق بشأن عنوان Vary. ومع ذلك، في بعض حالات الاستخدام المتقدّمة، قد يكون لديك رؤوس أخرى تحتاج إليها للتأثير في ذاكرة التخزين المؤقت. في هذه الحالة، يمكنك ضبط العنوان Vary في استجابتك. على سبيل المثال:

res.set('Vary', 'Accept-Encoding, X-My-Custom-Header');

في هذه الحالة، تكون قيمة عنوان Vary هي:

vary: X-My-Custom-Header, x-fh-requested-host, accept-encoding, cookie, authorization

باستخدام هذه الإعدادات، يتم تخزين اثنين من الطلبات المتطابقة التي تتضمّن عناوين X-My-Custom-Header مختلفة بشكل منفصل في ذاكرة التخزين المؤقت. يُرجى العِلم أنّ Hosting تُضيف Cookie وAuthorization إلى عنوان Vary تلقائيًا عند تقديم طلب للمحتوى الديناميكي. يضمن ذلك أنّ أي عنوان ملف تعريف ارتباط أو إذن جلسة تستخدمه يصبح جزءًا من مفتاح ذاكرة التخزين المؤقت، ما يمنع تسرُّب محتوى غير مقصود.

يُرجى العلم أيضًا بما يلي:

  • لا يمكن تخزين طلبات GET وHEAD إلا في ذاكرة التخزين المؤقت. لا يتم الاحتفاظ بطلبات HTTPS التي تستخدم غيرها من الطرق في ذاكرة التخزين المؤقت.

  • يُرجى توخي الحذر عند إضافة إعدادات إلى عنوان Vary. وكلما زاد عدد الإعدادات التي تضيفها، قلّ احتمال أن يتمكّن نظام توصيل المحتوى (CDN) من عرض المحتوى المخزّن مؤقتًا. تذكَّر أيضًا أنّ Vary يستند إلى رؤوس الطلبات، وليس رؤوس الاستجابات.

استخدام ملفات تعريف الارتباط

عند استخدام Firebase Hosting مع Cloud Functions أو Cloud Run، تتم إزالة ملفات تعريف الارتباط بشكل عام من الطلبات الواردة. هذا الإجراء ضروري للسماح بفعالية سلوك ذاكرة التخزين المؤقت في شبكة توصيل المحتوى (CDN). لا يُسمح إلا بمرور ملف تعريف الارتباط __session الذي يحمل اسمًا خاصًا من أجل تنفيذ تطبيقك.

عند توفّر ملف تعريف الارتباط __session، يتم تلقائيًا جعله جزءًا من مفتاح ملف التخزين المؤقت، ما يعني أنّه من المستحيل أن يتلقّى مستخدمان لديهما ملفات تعريف ارتباط مختلفة الاستجابة المخزّنة مؤقتًا للمستخدم الآخر. لا تستخدِم ملف تعريف الارتباط __session إلا إذا كان تطبيقك يعرض محتوى مختلفًا استنادًا إلى تفويض المستخدم.