تخزين محتوى التطبيق في ذاكرة التخزين المؤقت

يُعدّ Cloud CDN جزءًا أساسيًا من App Hosting التي تتيح لك استضافة تطبيق الويب. ويمرّ كل طلب إلى الخادم الخلفي عبر Cloud CDN أولاً. يتم عرض المحتوى المخزّن مؤقتًا في شبكة CDN على الفور للمستخدم، ما يؤدي إلى عدم الحاجة إلى الانتقال إلى خدمة Cloud Run التي تشغّل رمز خادم تطبيق الويب. يمكنك الاطّلاع على مزيد من المعلومات حول المزايا العامة لشبكات CDN على web.dev.

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

المحتوى القابل للتخزين المؤقت

يخزّن Cloud CDN الردود مؤقتًا إذا تحقّقت جميع الشروط التالية:

  1. الطلب هو GET

  2. تحتوي الاستجابة على رمز الحالة 200 أو 203 أو 204 أو 206 أو 300 أو 301 أو 302 أو 307 أو 308 أو 404 أو 405 أو 410 أو 421 أو 451 أو 501.

  3. تحتوي الاستجابة على عنوان Cache-Control يتضمّن توجيه max-age أو s-maxage، أو عنوان Expires يتضمّن طابعًا زمنيًا في المستقبل.

  4. تحتوي الاستجابة على عنوان Age أو عنوان Cache-Control يتضمّن توجيه public صريحًا.

  5. لا يزيد حجم الاستجابة عن 10 ميغابايت.

ولا يتحقّق أي مما يلي:

  1. تحتوي الاستجابة على عنوان Set-Cookie

  2. تحتوي الاستجابة على عنوان Vary يتضمّن قيمة غير Accept أو Accept-Encoding أو Access-Control-Request-Headers أو Access-Control-Request-Method أو Origin أو Sec-Fetch-Dest أو Sec-Fetch-Mode أو Sec-Fetch-Site أو X-Goog-Allowed-Resources أو X-Origin أو RSC أو Next-Router-State-Tree أو Next-Router-Prefetch أو Next-Router-Segment-Prefetch.

  3. تحتوي الاستجابة على عنوان Cache-Control يتضمّن توجيه no-store أو private.

  4. يحتوي الطلب على عنوان Cache-Control يتضمّن توجيه no-store.

  5. يحتوي الطلب على عنوان Authorization، ما لم تتضمّن الاستجابة توجيهًا صريحًا للتحكّم في ذاكرة التخزين المؤقت.

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

Next.js

يضبط Next.js توجيهات التحكّم في ذاكرة التخزين المؤقت ضمنيًا استنادًا إلى عدد من العوامل. ومع ذلك، يمكنك إلغاء هذه التوجيهات من خلال ضبط العنوان يدويًا في ملفك next.config.js. على سبيل المثال، لضمان عدم تخزين صفحة مؤقتًا في Cloud CDN:

  /** @type {import('next').NextConfig} */
  const nextConfig = {
      headers: async () => [{
          source: "/YOUR_PRIVATE_PAGE",
          headers: [{
              key: "Cache-Control",
              value: "private"
          }],
      }],
  };

Angular

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

import { RenderMode, ServerRoute } from '@angular/ssr';

export const serverRoutes: ServerRoute[] = [
  {
    path: '**',
    renderMode: RenderMode.Prerender,
    headers: {
      'Cache-Control': 'public, max-age=3600',
    }
  }
];

أو لضمان عدم تخزين صفحة معيّنة مؤقتًا:

import { RenderMode, ServerRoute } from '@angular/ssr';

export const serverRoutes: ServerRoute[] = [
  // ... other routes
  {
    path: 'YOUR_PRIVATE_PAGE',
    renderMode: RenderMode.Server,
    headers: {
      'Cache-Control': 'private',
    }
  }
];

التوجيهات التي يتم التقيّد بها

تلتزم مثيل Cloud CDN في Firebase App Hosting's بتوجيهات التحكّم في ذاكرة التخزين المؤقت التالية:

التوجيه الطلب الردّ
no-store عندما يكون هذا التوجيه مضمّنًا في طلب، لن يتم تخزين الردّ مؤقتًا. لا يتم تخزين الردّ الذي يتضمّن no-store مؤقتًا.
no-cache يتم تجاهل توجيه الطلب no-cache لمنع العملاء من بدء عملية إعادة التحقق من المصدر أو فرضها. يتم تخزين الردّ الذي يتضمّن no-cache مؤقتًا، ولكن يجب إعادة التحقق منه باستخدام المصدر قبل عرضه.
public لا ينطبق هذا التوجيه ليس مطلوبًا لإمكانية التخزين المؤقت، ولكن من أفضل الممارسات تضمينه للمحتوى الذي يجب أن تخزّنه الخوادم الوكيلة مؤقتًا.
private لا ينطبق لا يخزّن Cloud CDN الردّ الذي يتضمّن توجيه private مؤقتًا، حتى إذا كان الردّ قابلاً للتخزين المؤقت بخلاف ذلك. قد تظلّ البرامج على أجهزة العملاء (مثل المتصفحات) تخزّن النتيجة مؤقتًا. استخدِم no-store لمنع جميع عمليات التخزين المؤقت للردود.
max-age=SECONDS يتم تجاهل توجيه الطلب max-age. يتم عرض ردّ مخزّن مؤقتًا كما لو لم يتم تضمين هذا العنوان في الطلب. يتم تخزين الردّ الذي يتضمّن توجيه max-age مؤقتًا لمدة تصل إلى `SECONDS` المحدّدة.
s-maxage=SECONDS لا ينطبق يتم تخزين الردّ الذي يتضمّن توجيه s-maxage مؤقتًا لمدة تصل إلى `SECONDS` المحدّدة. إذا كان كل من max-age وs-maxage متوفرَين، يستخدم Cloud CDN توجيه s‑maxage. لا يتم عرض الردود التي تتضمّن هذا التوجيه إذا كانت قديمة. لا يكون s-max-age (شرطتان) صالحًا لأغراض التخزين المؤقت.
max-stale=SECONDS يحدّد توجيه الطلب max-stale الحد الأقصى للقِدم (بالثواني) الذي يكون العميل على استعداد لقبوله. يأخذ Cloud CDN هذا التوجيه في الاعتبار، ولا يعرض ردًا مخزّنًا مؤقتًا وقديمًا إلا إذا كان قِدم الردّ أقل من توجيه max-stale. بخلاف ذلك، يعيد التحقق من صحة الردّ قبل عرض الطلب. لا ينطبق
stale-while-revalidate=SECONDS لا ينطبق يتم عرض ردّ يتضمّن stale-while-revalidate للعميل لمدة تصل إلى `SECONDS` أثناء إعادة التحقق من صحة الردّ بشكل غير متزامن.
must-revalidate لا ينطبق يتم إعادة التحقق من صحة الردّ الذي يتضمّن must-revalidate باستخدام خادم المصدر بعد انتهاء صلاحيته. لا يتم عرض الردود التي تتضمّن هذا التوجيه إذا كانت قديمة.
proxy-revalidate يتم إعادة التحقق من صحة الردّ الذي يتضمّن proxy-revalidate باستخدام خادم المصدر بعد انتهاء صلاحيته. لا يتم عرض الردود التي تتضمّن هذا التوجيه إذا كانت قديمة.
no-transform لا ينطبق لا يطبّق Cloud CDN أي عمليات تحويل.

قياس عدد الزيارات المخزّنة مؤقتًا وغير المخزّنة مؤقتًا

في علامة التبويب App Hosting > الاستخدام في Firebase Console، يعرض الرسم البياني "Cloud CDN - معدّل نقل البيانات الصادرة" البايتات المخزّنة مؤقتًا وغير المخزّنة مؤقتًا التي تم عرضها، ويتضمّن علامة لكل عملية طرح. يمكنك استخدام هذا الرسم البياني لقياس مدى فعالية جهودك لتحسين ذاكرة التخزين المؤقت.

يمكنك أيضًا الاطّلاع على معدّل الزيارات التي تم عرضها من ذاكرة التخزين المؤقت لمسارات معيّنة في تطبيق الويب باستخدام ميزة "المراقبة المستندة إلى المسار".