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

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

  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 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 في App Hosting من Firebase بالتوجيهات التالية المتعلّقة بإدارة ملف التخزين المؤقت:

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