تستخدم منصة Firebase Hosting شبكة توصيل محتوى (CDN) عالمية فعّالة لجعل موقعك الإلكتروني أسرع ما يمكن.
يتم تلقائيًا تخزين أي محتوى ثابت مطلوب مؤقتًا علىشبكة توصيل المحتوى (CDN). في حال إعادة نشر محتوى موقعك الإلكتروني، ستزيل Firebase Hosting تلقائيًا كل المحتوى المخزّن مؤقتًا على شبكة توصيل المحتوى (CDN) إلى حين تلقّي الطلب التالي.
ومع ذلك، بما أنّ خدمات Cloud Functions وCloud Run تنشئ المحتوى بشكل ديناميكي، يمكن أن يختلف المحتوى الخاص بعنوان URL معيّن استنادًا إلى عوامل مثل مدخلات المستخدم أو هويته. لمراعاة ذلك، لا يتم تلقائيًا تخزين الطلبات التي تتم معالجتها بواسطة الرمز البرمجي للخادم الخلفي مؤقتًا على شبكة توصيل المحتوى (CDN).
ومع ذلك، يمكنك ضبط سلوك التخزين المؤقت للمحتوى الديناميكي. على سبيل المثال، إذا كانت إحدى الدوال تنشئ محتوًى جديدًا بشكل دوري فقط، يمكنك تسريع تطبيقك من خلال تخزين المحتوى الذي تم إنشاؤه مؤقتًا لمدة قصيرة على الأقل.
يمكنك بالمثل ضبط سلوك التخزين المؤقت لتقليل تكاليف تنفيذ الدوال المحتملة، لأنّه يتم عرض المحتوى من شبكة توصيل المحتوى (CDN) بدلاً من دالة تم تشغيلها. يمكنك الاطّلاع على مزيد من المعلومات حول تحسين تنفيذ الدوال والخدمات في مستندات Cloud Functions وCloud Run.
الاستثناء هو الطلبات التي تعرض أخطاء 404. تخزّن شبكة توصيل المحتوى مؤقتًا الردّ 404 الذي تقدّمه خدمتك لعنوان URL غير متوفّر لمدة 10 دقائق، وبالتالي يتم عرض الطلبات اللاحقة لهذا العنوان من شبكة توصيل المحتوى. إذا غيّرت خدمتك بحيث أصبح المحتوى متاحًا على عنوان URL هذا، ستواصل شبكة توصيل المحتوى عرض أي أخطاء 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
على ذاكرة التخزين المؤقت. وهذا يعني أنّه يمكن لكلّ من المتصفّح والخوادم الوسيطة (أي شبكة توصيل المحتوى الخاصة بـ Firebase Hosting) تخزين المحتوى مؤقتًا.max-age
: يحدد للمتصفح وشبكة توصيل المحتوى (CDN) عدد الثواني التي يمكنهما تخزين المحتوى مؤقتًا خلالها. عند انتهاء الوقت المحدّد، يجب أن يعيد المتصفّح وشبكة توصيل المحتوى التحقّق من صحة المحتوى باستخدام خادم المصدر. في مثال العنوان، نسمح للمتصفّح وشبكة CDN بتخزين المحتوى مؤقتًا لمدة خمس دقائق (راجِعs-maxage
أدناه للاطّلاع على عناصر التحكّم المحدّدة في التخزين المؤقت على شبكة CDN).s-maxage
: تلغي التوجيهmax-age
في ما يتعلق بالتخزين المؤقت في شبكة توصيل المحتوى فقط، وتخبر شبكة توصيل المحتوى بعدد الثواني التي يمكنها تخزين المحتوى مؤقتًا. عند انتهاء الوقت المحدّد، يجب أن تعيد شبكة CDN التحقّق من صحة المحتوى مع خادم المصدر. في مثال العنوان أعلاه، نتجاوز الإعدادmax-age
لشبكة توصيل المحتوى فقط ونسمح لشبكة توصيل المحتوى بتخزين المحتوى مؤقتًا لمدة عشر دقائق.
بالنسبة إلى max-age
وs-maxage
، اضبط قيمتَيهما على أطول مدة زمنية
تسمح فيها للمستخدمين بتلقّي محتوى قديم. إذا كانت الصفحة تتغيّر كل بضع ثوانٍ، استخدِم قيمة وقت صغيرة. ومع ذلك، يمكن تخزين أنواع أخرى من المحتوى مؤقتًا بأمان لعدة ساعات أو أيام أو حتى أشهر.
يمكنك الاطّلاع على مزيد من المعلومات حول عنوان Cache-Control
في
شبكة مطوّري Mozilla
وفي
مستندات مطوّري البرامج على الويب من Google.
متى يتم عرض المحتوى المخزّن مؤقتًا؟
يخزّن المتصفّح وشبكة توصيل المحتوى (CDN) المحتوى مؤقتًا استنادًا إلى ما يلي:
- اسم المضيف
- المسار
- سلسلة طلب البحث
- محتوى عناوين الطلبات المحدّدة في العنوان
Vary
عناوين Vary
يحدّد
عنوان Vary
عناوين الطلبات التي يجب استخدامها لتقديم استجابة مناسبة (سواء كان المحتوى المخزّن مؤقتًا صالحًا أو ما إذا كان يجب إعادة التحقّق من صحة المحتوى باستخدام الخادم الأصلي).
تضبط 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
إلا إذا كان تطبيقك يعرض محتوًى مختلفًا استنادًا إلى إذن المستخدم.