Zawartość aplikacji w pamięci podręcznej

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

Podstawowa konfiguracja Cloud CDN jest ustawiana przez App Hosting i nie można jej modyfikować. Możesz jednak zoptymalizować zapisywanie w pamięci podręcznej, aby zwiększyć szybkość wczytywania stron, zmniejszyć ilość płatnych treści niezapisanych w pamięci podręcznej i zminimalizować ruch do Cloud Run.

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

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

  1. Żądanie jest typu GET.

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

  3. Odpowiedź ma nagłówek Cache-Control z dyrektywą max-age lub s-maxage albo nagłówek Expires ze znacznikiem czasu w przyszłości.

  4. Odpowiedź ma nagłówek Age lub nagłówek Cache-Control z jawną dyrektywą public.

  5. Rozmiar odpowiedzi nie przekracza 10 MiB.

i ŻADEN z tych warunków nie jest spełniony:

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

  2. Odpowiedź ma 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ź ma nagłówek Cache-Control z dyrektywą no-store lub private.

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

  5. Żądanie ma nagłówek Authorization, chyba że odpowiedź ma jawną dyrektywę dotyczącą pamięci podręcznej.

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

Next.js

Next.js ustawia dyrektywy dotyczące pamięci podręcznej niejawnie na podstawie wielu czynników. Możesz jednak zastąpić te ustawienia, ręcznie ustawiając nagłówek w pliku next.config.js. Aby na przykład mieć pewność, że strona nie jest zapisywana w pamięci podręcznej 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 domyślnie jawnych dyrektyw dotyczących pamięci podręcznej. Możesz dodać własne, określając nagłówki dotyczące pamięci podręcznej w trasach serwera. Aby na przykład zezwolić Cloud CDN na zapisywanie wszystkich stron w pamięci podręcznej przez godzinę:

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

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

Lub aby mieć pewność, że określona strona nie będzie zapisywana 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',
    }
  }
];

Uwzględniane dyrektywy

Instancja Cloud CDN w Firebase App Hostinguwzględnia te dyrektywy dotyczące pamięci podręcznej:

Dyrektywa Żądanie Odpowiedź
no-store Jeśli ta dyrektywa występuje w żądaniu, odpowiedź nie będzie zapisywana w pamięci podręcznej. Odpowiedź z dyrektywą no-store nie jest zapisywana w pamięci podręcznej.
no-cache Dyrektywa żądania no-cache jest ignorowana, aby uniemożliwić klientom inicjowanie lub wymuszanie ponownej weryfikacji w źródle. Odpowiedź z dyrektywą no-cache jest zapisywana w pamięci podręcznej, ale przed jej udostępnieniem musi zostać ponownie zweryfikowana w źródle.
public Nie dotyczy Ta dyrektywa nie jest wymagana do zapisywania w pamięci podręcznej, ale warto ją uwzględnić w przypadku treści, które powinny być zapisywane w pamięci podręcznej przez serwery proxy.
private Nie dotyczy Odpowiedź z dyrektywą private nie jest zapisywana w pamięci podręcznej Cloud CDN, nawet jeśli w przeciwnym razie byłaby uznawana za odpowiedź, którą można zapisać w pamięci podręcznej. Klienci (np. przeglądarki) mogą nadal zapisywać wynik w pamięci podręcznej. Aby uniemożliwić zapisywanie odpowiedzi w pamięci podręcznej, użyj dyrektywy no-store.
max-age=SECONDS Dyrektywa żądania max-age jest ignorowana. Zapisana w pamięci podręcznej odpowiedź jest zwracana tak, jakby ten nagłówek nie był uwzględniony w żądaniu. Odpowiedź z dyrektywą max-age jest zapisywana w pamięci podręcznej przez określony czas (w SEKUNDACH).
s-maxage=SECONDS Nie dotyczy Odpowiedź z dyrektywą s-maxage jest zapisywana w pamięci podręcznej przez określony czas (w SEKUNDACH). Jeśli występują zarówno dyrektywy max-age, jak i s-maxage, Cloud CDN używa dyrektywy s‑maxage. Odpowiedzi z tą dyrektywą nie są udostępniane jako nieaktualne. Dyrektywa s-max-age (z 2 łącznikami) nie jest prawidłowa na potrzeby zapisywania w pamięci podręcznej.
max-stale=SECONDS Dyrektywa żądania max-stale określa maksymalną nieaktualność (w sekundach), którą klient jest gotów zaakceptować. Cloud CDN uwzględnia tę dyrektywę i zwraca nieaktualną odpowiedź zapisaną w pamięci podręcznej tylko wtedy, gdy nieaktualność odpowiedzi jest mniejsza niż wartość dyrektywy max-stale. W przeciwnym razie przed udostępnieniem żądania ponownie je weryfikuje. Nie dotyczy
stale-while-revalidate=SECONDS Nie dotyczy Odpowiedź z dyrektywą stale-while-revalidate jest udostępniana klientowi przez określony czas (w SEKUNDACH), podczas gdy ponowna weryfikacja odbywa się asynchronicznie.
must-revalidate Nie dotyczy Odpowiedź z dyrektywą must-revalidate jest ponownie weryfikowana w serwerze pierwotnym po wygaśnięciu. Odpowiedzi z tą dyrektywą nie są udostępniane jako nieaktualne.
proxy-revalidate Odpowiedź z dyrektywą proxy-revalidate jest ponownie weryfikowana w serwerze pierwotnym po wygaśnięciu. Odpowiedzi z tą dyrektywą nie są udostępniane jako nieaktualne.
no-transform Nie dotyczy Cloud CDN nie stosuje żadnych przekształceń.

Pomiar ruchu zapisanego i niezapisanego w pamięci podręcznej

Na karcie App Hosting > Użycie w konsoli Firebase wykres „Cloud CDN – przepustowość wychodząca” pokazuje liczbę bajtów zapisanych i niezapisanych w pamięci podręcznej oraz oznaczenie każdej wersji. Za pomocą tego wykresu możesz mierzyć skuteczność optymalizacji pamięci podręcznej.

Możesz też wyświetlić współczynnik trafień w pamięci podręcznej w przypadku określonych tras w aplikacji internetowej za pomocą monitorowania opartego na trasach.