يُعدّ Cloud CDN جزءًا أساسيًا من App Hosting التي تتيح لك استضافة تطبيق الويب. ويمرّ كل طلب إلى الخادم الخلفي عبر Cloud CDN أولاً. يتم عرض المحتوى المخزّن مؤقتًا في شبكة CDN على الفور للمستخدم، ما يؤدي إلى عدم الحاجة إلى الانتقال إلى خدمة Cloud Run التي تشغّل رمز خادم تطبيق الويب. يمكنك الاطّلاع على مزيد من المعلومات حول المزايا العامة لشبكات CDN على web.dev.
على الرغم من أنّ ميزة App Hosting تضبط إعدادات Cloud CDN الأساسية ولا يمكن تعديلها، يمكنك اتّخاذ عدد من الإجراءات لتحسين التخزين المؤقت من أجل زيادة سرعات تحميل الصفحات وتقليل المحتوى غير المخزّن مؤقتًا الذي يتم تحصيل رسوم مقابله وتقليل عدد الزيارات إلى Cloud Run.
المحتوى القابل للتخزين المؤقت
يخزّن Cloud CDN الردود مؤقتًا إذا تحقّقت جميع الشروط التالية:
الطلب هو GET
تحتوي الاستجابة على رمز الحالة
200أو203أو204أو206أو300أو301أو302أو307أو308أو404أو405أو410أو421أو451أو501.تحتوي الاستجابة على عنوان
Cache-Controlيتضمّن توجيهmax-ageأوs-maxage، أو عنوانExpiresيتضمّن طابعًا زمنيًا في المستقبل.تحتوي الاستجابة على عنوان
Ageأو عنوانCache-Controlيتضمّن توجيهpublicصريحًا.لا يزيد حجم الاستجابة عن 10 ميغابايت.
ولا يتحقّق أي مما يلي:
تحتوي الاستجابة على عنوان
Set-Cookieتحتوي الاستجابة على عنوان
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.تحتوي الاستجابة على عنوان
Cache-Controlيتضمّن توجيهno-storeأوprivate.يحتوي الطلب على عنوان
Cache-Controlيتضمّن توجيهno-store.يحتوي الطلب على عنوان
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 - معدّل نقل البيانات الصادرة" البايتات المخزّنة مؤقتًا وغير المخزّنة مؤقتًا التي تم عرضها، ويتضمّن علامة لكل عملية طرح. يمكنك استخدام هذا الرسم البياني لقياس مدى فعالية جهودك لتحسين ذاكرة التخزين المؤقت.
يمكنك أيضًا الاطّلاع على معدّل الزيارات التي تم عرضها من ذاكرة التخزين المؤقت لمسارات معيّنة في تطبيق الويب باستخدام ميزة "المراقبة المستندة إلى المسار".