Zawartość aplikacji w pamięci podręcznej

Cloud CDN jest kluczowym elementem obsługi aplikacji internetowej przez App Hosting. Każde żądanie wysyłane do backendu przechodzi najpierw przez Cloud CDN. Treści, które są już zapisane w CDN, są natychmiast przesyłane do użytkownika, co pozwala pominąć usługę Cloud Run, która obsługuje kod serwera Twojej aplikacji internetowej. Więcej informacji o ogólnych zaletach sieci CDN znajdziesz na stronie web.dev.

Chociaż podstawowa konfiguracja Cloud CDN jest ustawiana przez App Hosting i nie można jej modyfikować, możesz wykonać kilka czynności, aby zoptymalizować zapisywanie w pamięci podręcznej w celu zwiększenia szybkości wczytywania strony, zmniejszenia naliczanych opłat za treści nieprzechowywane w pamięci podręcznej oraz zminimalizowania ruchu do Cloud Run.

Treści, które można przechowywać w pamięci podręcznej

Cloud CDN przechowuje odpowiedzi w pamięci podręcznej, jeśli WSZYSTKIE te warunki są spełnione:

  1. Żądanie jest żądaniem GET.

  2. Odpowiedź ma kod stanu 200, 203, 204, 206, 300, 301, 302, 307, 308, 404, 405, 410, 421, 451 lub 501.

  3. Odpowiedź zawiera nagłówek Cache-Control z instrukcją max-age lub s-maxage lub nagłówek Expires z oznaczeniem czasowym w przyszłości.

  4. Odpowiedź zawiera nagłówek Age lub nagłówek Cache-Control z wyraźną dyrektywą public.

  5. Odpowiedź ma rozmiar nie większy niż 10 MiB.

żadne z tych stwierdzeń nie jest prawdziwe:

  1. Odpowiedź zawiera nagłówek Set-Cookie

  2. Odpowiedź zawiera nagłówek Vary z wartością inną niż 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 lub Next-Router-Segment-Prefetch.

  3. Odpowiedź zawiera nagłówek Cache-Control z instrukcją no-store lub private.

  4. Żądanie zawiera nagłówek Cache-Control z dyrektywą no-store.

  5. Żądanie ma nagłówek Authorization, chyba że odpowiedź zawiera wyraźną dyrektywę kontroli pamięci podręcznej.

Dostosowywanie działania za pomocą dyrektyw kontroli pamięci podręcznej

Next.js

Next.js ustawia dyrektywy cache-control w sposób domyślny na podstawie kilku czynników. Możesz jednak je zastąpić, ręcznie ustawiając nagłówek w pliku next.config.js. Aby na przykład mieć pewność, że strona nie jest buforowana w Cloud CDN:

  /** @type {import('next').NextConfig} */
  const nextConfig = {
      headers: async () => [{
          source: "/YOUR_PRIVATE_PAGE",
          headers: [{
              key: "Cache-Control",
              value: "private"
          }],
      }],
  };

Angular

Angular SSR nie ustawia jawnych dyrektyw cache-control domyślnie. Możesz dodać własne nagłówki, określając nagłówki cache-control w swoich trasach serwera. Aby na przykład umożliwić Cloud CDN buforowanie wszystkich stron przez godzinę:

import { RenderMode, ServerRoute } from '@angular/ssr';

export const serverRoutes: ServerRoute[] = [
  {
    path: '**',
    renderMode: RenderMode.Prerender,
    headers: {
      'Cache-Control': 'public, max-age=3600',
    }
  }
];

Aby mieć pewność, że dana strona nie zostanie zapisana w pamięci podręcznej:

import { RenderMode, ServerRoute } from '@angular/ssr';

export const serverRoutes: ServerRoute[] = [
  // ... other routes
  {
    path: 'YOUR_PRIVATE_PAGE',
    renderMode: RenderMode.Server,
    headers: {
      'Cache-Control': 'private',
    }
  }
];

Dyrektywy

Inicjalność Cloud CDN w Firebase App Hosting jest zgodna z tymi dyrektywami kontroli pamięci podręcznej:

Dyrektywa Żądanie Odpowiedź
no-store Jeśli jest obecny w żądaniu, odpowiedź nie zostanie zapisana w pamięci podręcznej. Odpowiedź z no-store nie jest przechowywana w pamięci podręcznej.
no-cache Dyrektywa żądania no-cache jest ignorowana, aby uniemożliwić klientom inicjowanie lub wymuszanie ponownej walidacji źródła. Odpowiedź z wartością no-cache jest przechowywana w pamięci podręcznej, ale przed wyświetleniem musi zostać ponownie zweryfikowana przez źródło.
public Nie dotyczy Ta dyrektywa nie jest wymagana do obsługi pamięci podręcznej, ale warto ją uwzględnić w przypadku treści, które powinny być przechowywane w pamięci podręcznej przez serwery proxy.
private Nie dotyczy Odpowiedź z dyrektywą private nie jest przechowywana w pamięci podręcznej usługi Cloud CDN, nawet jeśli jest ona uznawana za odpowiednią do przechowywania w pamięci podręcznej. Klienci (np. przeglądarki) mogą nadal przechowywać wynik w pamięci podręcznej. Użyj parametru no-store, aby zapobiec buforowaniu odpowiedzi.
max-age=SECONDS Dyrektywa żądania max-age jest ignorowana. Zwracana jest odpowiedź z pamięci podręcznej, tak jakby ten nagłówek nie był uwzględniony w żądaniu. Odpowiedź z dyrektywą max-age jest przechowywana w pamięci podręcznej do określonej liczby sekund.
s-maxage=SECONDS Nie dotyczy Odpowiedź z dyrektywą s-maxage jest przechowywana w pamięci podręcznej do określonej liczby sekund. Jeśli dostępne są zarówno max-age, jak i s-maxage, sieć Cloud CDN używa wartości s‑maxage. Odpowiedzi z tą dyrektywą nie są przesyłane jako nieaktualne. s-max-age (2 łączniki) nie jest prawidłowy do celów buforowania.
max-stale=SECONDS Dyrektywa max-stale żądania określa maksymalną nieaktualność (w sekundach), którą klient jest gotowy zaakceptować. Cloud CDN uwzględnia tę wartość i zwraca nieaktualną odpowiedź z pamięci podręcznej tylko wtedy, gdy nieaktualność odpowiedzi jest mniejsza niż wartość dyrektywy max-stale. W przeciwnym razie ponownie sprawdza poprawność przed wykonaniem żądania. Nie dotyczy
stale-while-revalidate=SECONDS Nie dotyczy Odpowiedź z stale-while-revalidate jest wysyłana do klienta przez maksymalnie SECONDS, podczas gdy weryfikacja odbywa się asynchronicznie.
must-revalidate Nie dotyczy Po upływie ważności odpowiedź z must-revalidate jest ponownie weryfikowana przez serwer źródłowy. Odpowiedzi z tą dyrektywą nie są przesyłane jako nieaktualne.
proxy-revalidate Po upływie ważności odpowiedź z proxy-revalidate jest ponownie weryfikowana przez serwer źródłowy. Odpowiedzi z tą dyrektywą nie są przesyłane jako nieaktualne.
no-transform Nie dotyczy Cloud CDN nie stosuje żadnych przekształceń.

Zliczanie ruchu z wykorzystaniem pamięci podręcznej i bez jej wykorzystania

Wykres „Cloud CDN – Przesyłana przepustowość” na karcie Wykorzystanie w konsoli App Hosting zawiera informacje o bajtach z pamięci podręcznej i bez niej oraz oznaczenia dla każdego wdrożenia. Za pomocą tego wykresu możesz mierzyć skuteczność optymalizacji pamięci podręcznej.