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

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

على الرغم من أنّ إعدادات Cloud CDN الأساسية يتم ضبطها من قِبل App Hosting ولا يمكن تعديلها، هناك عدد من الإجراءات التي يمكنك اتّخاذها لتحسين التخزين المؤقت من أجل زيادة سرعات تحميل الصفحات وتقليل المحتوى غير المخزَّن مؤقتًا الذي يتم تحصيل رسوم مقابله والحدّ من عدد الزيارات إلى 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 أو Next-Url.

  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 SSR توجيهات صريحة للتحكّم في ذاكرة التخزين المؤقت تلقائيًا. ويمكنك إضافة قواعدك الخاصة من خلال تحديد عناوين التحكّم في ذاكرة التخزين المؤقت في مسارات الخادم. على سبيل المثال، للسماح لـ 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 بتوجيهات التحكّم في ذاكرة التخزين المؤقت التالية:

التوجيه الطلب الردّ
no-store عند توفّر هذه القيمة في طلب، لن يتم تخزين الاستجابة في ذاكرة التخزين المؤقت. لا يتم تخزين الردّ الذي يتضمّن no-store في ذاكرة التخزين المؤقت.
no-cache يتم تجاهل توجيه الطلب no-cache لمنع العملاء من بدء إعادة التحقّق من المصدر أو فرضها. يتم تخزين الاستجابة التي تتضمّن no-cache مؤقتًا، ولكن يجب إعادة التحقّق من صحتها من خلال المصدر قبل عرضها.
public لا ينطبق لا يُعدّ هذا التوجيه مطلوبًا لإمكانية التخزين المؤقت، ولكن من أفضل الممارسات تضمينه للمحتوى الذي يجب تخزينه مؤقتًا بواسطة الخوادم الوكيلة.
private لا ينطبق لا تخزّن خدمة Cloud CDN مؤقتًا الاستجابة التي تتضمّن التوجيه private، حتى إذا كانت الاستجابة قابلة للتخزين المؤقت. وقد تظل برامج العميل (مثل المتصفحات) تخزّن النتيجة مؤقتًا. استخدِم no-store لمنع تخزين جميع الردود مؤقتًا.
max-age=SECONDS يتم تجاهل توجيه الطلب max-age. يتم عرض استجابة مخزَّنة مؤقتًا كما لو لم يتم تضمين هذا العنوان في الطلب. يتم تخزين الاستجابة التي تتضمّن التوجيه max-age مؤقتًا لمدة تصل إلى عدد الثواني المحدّد.
s-maxage=SECONDS لا ينطبق يتم تخزين الاستجابة التي تتضمّن التوجيه s-maxage مؤقتًا لمدة تصل إلى عدد الثواني المحدّد. إذا كان كل من 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، يعرض الرسم البياني "Cloud CDN - معدّل نقل البيانات الصادرة" وحدات البايت المخزّنة مؤقتًا وغير المخزّنة مؤقتًا التي تم عرضها، ويحتوي على علامة لكل عملية طرح. يمكنك استخدام هذا الرسم البياني لقياس فعالية جهود تحسين ذاكرة التخزين المؤقت.

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