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

يستخدم Firebase Hosting شبكة CDN عالمية قوية لجعل موقعك أسرع ما يمكن.

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

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

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

يمكنك أيضًا تقليل تكاليف تنفيذ الوظائف لأن المحتوى يتم تقديمه من CDN بدلاً من وظيفة مشغلة. اقرأ المزيد حول تحسين تنفيذ الوظائف والخدمات في وثائق Cloud Functions و Cloud Run .

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

تعيين التحكم في ذاكرة التخزين المؤقت

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

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

في عنوان المثال هذا ، تقوم التوجيهات بثلاثة أشياء:

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

  • max-age - يخبر المتصفح و CDN بعدد الثواني التي يمكنهم فيها تخزين المحتوى مؤقتًا. عند انتهاء الوقت المحدد ، يجب على المستعرض و CDN إعادة التحقق من المحتوى باستخدام الخادم الأصلي. في رأس المثال ، نسمح للمتصفح و CDN بتخزين المحتوى مؤقتًا لمدة خمس دقائق (انظر s-maxage أدناه للتعرف على عناصر تحكم محددة للتخزين المؤقت لـ CDN).

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

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

يمكنك معرفة المزيد حول رأس Cache-Control على شبكة مطوري Mozilla وفي وثائق مطور الويب من Google.

متى يتم تقديم المحتوى المخزن مؤقتًا؟

يقوم المتصفح و CDN بتخزين المحتوى الخاص بك مؤقتًا بناءً على:

  • اسم المضيف
  • الطريق
  • سلسلة الاستعلام
  • محتوى رؤوس الطلب المحدد في رأس 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 مختلفة مؤقتًا بشكل منفصل. لاحظ أن الاستضافة تضيف ملف Cookie Authorization إلى رأس Vary افتراضيًا عند تقديم طلب لمحتوى ديناميكي. هذا يضمن أن أي جلسة أو رأس ترخيص ملف تعريف ارتباط تستخدمه يكون جزءًا من مفتاح التخزين المؤقت ، مما يمنع التسريبات العرضية للمحتوى.

لاحظ أيضًا:

  • يمكن تخزين طلبات GET و HEAD فقط مؤقتًا. لا يتم تخزين طلبات HTTPS التي تستخدم طرقًا أخرى في ذاكرة التخزين المؤقت مطلقًا.

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

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

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

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