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است.اندازه پاسخ کمتر یا برابر با ۱۰ مبیبایت باشد.
و هیچکدام از موارد زیر درست نباشد:
پاسخ دارای سرصفحه
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 بهطور پیشفرض دستورالعملهای صریح 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 تا SECONDS به مشتری ارائه میشود درحالیکه اعتبارسنجی مجدد بهصورت ناهمگام انجام میشود. |
must-revalidate |
نامربوط | پاسخ با must-revalidate پساز منقضی شدن با سرور مبدأ دوباره اعتبارسنجی میشود. پاسخهای دارای این دستورالعمل بهصورت کهنه ارائه نمیشوند. |
proxy-revalidate |
پاسخ با proxy-revalidate پساز منقضی شدن با سرور مبدأ دوباره اعتبارسنجی میشود. پاسخهای دارای این دستورالعمل بهصورت کهنه ارائه نمیشوند. |
|
no-transform |
نامربوط | هیچ تبدیلی توسط Cloud CDN اعمال نمیشود. |
اندازهگیری ترافیک ذخیرهشده در حافظه پنهان و ذخیرهنشده در حافظه پنهان
در برگه میزبانی برنامه > استفاده در کنسول Firebase، نمودار «Cloud CDN - پهنای باند خروجی» بایتهای ذخیرهشده و ذخیرهنشده ارائهشده را نشان میدهد، و برای هر عرضه یک علامت دارد. میتوانید از این نمودار برای اندازهگیری اثربخشی تلاشهایتان برای بهینهسازی حافظه نهان استفاده کنید.
همچنین میتوانید نرخ اصابت حافظه نهان را برای مسیرهای خاص در برنامه وب خود با پایش مبتنی بر مسیر مشاهده کنید.