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