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

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

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

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

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

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

Next.js

تضبط Next.js توجيهات cache-control ضمنيًا استنادًا إلى عدد من العوامل. ومع ذلك، يمكنك تجاهل هذه القيم من خلال ضبط العنوان يدويًا في ملف 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 توجيهات cache-control الصريحة بعد إخراجه من الصندوق. يمكنك إضافة عناوين خاصة بك من خلال تحديد عناوين cache-control في مسارات الخادم. على سبيل المثال، للسماح لخدمة 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 لا ينطبق لا يتم تخزين استجابة تتضمّن التوجيه private مؤقتًا في Cloud CDN، حتى إذا كانت الاستجابة قابلة للتخزين المؤقت. قد تواصل البرامج المستخدِمة (مثل المتصفحات) تخزين النتيجة مؤقتًا. استخدِم 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 للعميل لمدة تصل إلى ثوانٍ أثناء إعادة التحقّق بشكل غير متزامن.
must-revalidate لا ينطبق تتم إعادة التحقّق من صحة الاستجابة التي تتضمّن must-revalidate باستخدام خادم المصدر بعد انتهاء صلاحيتها. لا يتم عرض الردود التي تتضمّن هذه التوجيهات على أنّها قديمة.
proxy-revalidate تتم إعادة التحقّق من صحة الاستجابة التي تتضمّن proxy-revalidate باستخدام خادم المصدر بعد انتهاء صلاحيتها. لا يتم عرض الردود التي تتضمّن هذه التوجيهات على أنّها قديمة.
no-transform لا ينطبق لا تطبّق Cloud CDN أي عمليات تحويل.

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

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