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