שמירת תוכן האפליקציה במטמון

‫Cloud CDN הוא חלק קריטי בתמיכה של App Hosting באפליקציית האינטרנט שלכם. כל בקשה לקצה העורפי עוברת קודם דרך Cloud CDN. תוכן שכבר נשמר במטמון ב-CDN מוגש מיד למשתמש, בלי לעבור דרך שירות Cloud Run שמריץ את קוד השרת של אפליקציית האינטרנט. מידע נוסף על היתרונות הכלליים של רשתות CDN זמין בכתובת web.dev.

ההגדרות הבסיסיות של Cloud CDN נקבעות על ידי App Hosting ואי אפשר לשנות אותן, אבל יש כמה דברים שאפשר לעשות כדי לשפר את השמירה במטמון, להגביר את מהירות הטעינה של הדפים, לצמצם את התוכן שלא נשמר במטמון ומחויב, ולצמצם את התנועה ל-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 מפורשת.

  5. גודל התשובה הוא עד 10MiB.

ואף אחד מהתנאים הבאים לא מתקיים:

  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 או Next-Url.

  3. לתשובה יש כותרת Cache-Control עם ההוראה no-store או private.

  4. לבקשה יש כותרת Cache-Control עם הוראת no-store.

  5. לבקשה יש כותרת Authorization, אלא אם לתשובה יש הוראה מפורשת לשליטה במטמון.

התאמה אישית של ההתנהגות באמצעות הוראות לבקרת המטמון

Next.js

‫Next.js מגדיר הוראות cache-control באופן משתמע על סמך כמה גורמים. עם זאת, אפשר לשנות את ההגדרות האלה על ידי הגדרה ידנית של הכותרת בקובץ 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 לא רלוונטי ההוראה הזו לא נדרשת כדי לאפשר שמירה במטמון, אבל מומלץ לכלול אותה בתוכן שצריך לשמור במטמון באמצעות שרתי proxy.
private לא רלוונטי תגובה עם ההוראה private לא נשמרת במטמון על ידי Cloud CDN, גם אם התגובה נחשבת כניתנת לשמירה במטמון. יכול להיות שהלקוחות (כמו דפדפנים) עדיין ישמרו את התוצאה במטמון. משתמשים ב-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 > Usage במסוף Firebase, בתרשים Cloud CDN - רוחב הפס לנתונים יוצאים מוצגים הבייטים שנשמרו במטמון ואלה שלא נשמרו במטמון, ויש סימון לכל השקה. אתם יכולים להשתמש בתרשים הזה כדי למדוד את היעילות של מאמצי האופטימיזציה של המטמון.

אפשר גם לראות את שיעור המציאה במטמון של מסלולים ספציפיים באפליקציית האינטרנט באמצעות מעקב מבוסס-מסלול.