Przejdź do głównej zawartości

Nagrzewanie cache

Po deployu, pełnym Clear cache lub masowej inwalidacji Twój cache jest pusty. Pierwszy odwiedzający każdą stronę płaci pełny koszt renderu (MISS). Cache warming pre-generuje każdy cache’owalny URL z wyprzedzeniem, by odwiedzający widzieli tylko odpowiedzi z cache.

Warmup jest sterowany kolejką Symfony Messenger — żądanie dispatchu wraca natychmiast, potem worker przerabia URL-e w tle. Postęp jest śledzony w bazie i pokazywany na żywo w panelu.

  1. Otwórz Settings → Speed Boost → Dashboard.
  2. Kliknij Start warmup.
  3. (Opcjonalnie) Nadpisz Batch size (domyślnie 50).
  4. Potwierdź. Warmup jest dispatchowany do kolejki.

Dashboard pokazuje:

  • Total URLs — odkryte cache’owalne URL-e na początku
  • Checked — ile zostało przetworzonych do tej pory (sukces lub failure)
  • Remaining — URL-e jeszcze w locie
  • Percentage ukończenia
  • Real-time panel statystyk cache per typ, który aktualizuje się w trakcie zapisu wpisów

Możesz Pause, Resume lub Cancel w dowolnym momencie z dashboardu.

Query odkrywania warmupu zbiera każdy URL, który cache potrafi obsłużyć:

  • Aktywne produkty widoczne dla każdego kanału sprzedaży (deduplikowane przeciw seo_url)
  • Aktywne kategorie będące częścią drzewa nawigacji (deduplikowane przeciw seo_url)
  • Strony CMS przypisane do kanału sprzedaży
  • Strona główna każdego kanału sprzedaży

Query honoruje flagi widoczności, zakres kanału sprzedaży i unikalność SEO-url — wyłączone lub niewidoczne URL-e są pomijane.

Warmup respektuje przełącznik kanału sprzedaży w headerze. Jeśli wybierzesz pojedynczy kanał przed startem, nagrzane zostaną tylko URL-e tego kanału. Z “All sales channels” wybranym warmup pokrywa każdy aktywny kanał.

Warming działa na Symfony Messenger. Worker async musi działać:

Okno terminala
bin/console messenger:consume async --time-limit=300

Na produkcji uruchom worker jako długo żyjący proces (systemd, supervisor lub cokolwiek już używasz do innych zadań async Shopware). Bez działającego workera warmup będzie siedział w kolejce na zawsze — żądanie Start warmup dalej się uda i wpis postępu zostanie stworzony, ale Checked zostanie na 0.

Gdy URL zwraca status HTTP inny niż 2xx, liczy się jako failure, ale nie zatrzymuje warmupu. Failed URLs są wylistowane w Warmup history → Detail dla danego runa, ze statusem i fragmentem odpowiedzi.

Częste powody:

  • Łańcuch redirectów (np. stary SEO URL → 301 → nowy SEO URL) — zwykle ok
  • Kategoria bez widocznych produktów (zwraca 404 w niektórych theme’ach)
  • Strona CMS ukryta przez uprawnienia
  • Błąd infrastruktury (502 / 504) — uruchom warmup ponownie, gdy podstawowy problem zostanie naprawiony

Każdy run warmupu tworzy wiersz w Warmup history:

  • Timestampy started / finished
  • Liczniki total / checked / failed
  • Średni czas odpowiedzi HTTP
  • Status (running / paused / cancelled / completed)

Detail view drąży w pojedyncze URL-e i ich rezultaty. Historia jest zachowywana w nieskończoność — wyczyść ręcznie, jeśli nie potrzebujesz.

Warmup trafia URL-e przez HTTP domyślnie. Jeśli chcesz nagrzewać URL-e HTTPS (typowe dla produkcji), upewnij się, że storefront domain w Sales Channels → Domains używa https:// — warmup podąża za tym schematem.

Aby nagrzać cache jako część pipeline deploya, trafiaj endpoint REST:

Okno terminala
curl -X POST https://your-shop.example.com/api/_action/p2lab-cache/warmup/start \
-H "Authorization: Bearer $ADMIN_TOKEN" \
-H "Content-Type: application/json" \
-d '{"salesChannelId":null,"batchSize":100}'

Odpowiedź zawiera progressId, który możesz pollować przez /api/_action/p2lab-cache/warmup/progress?progressId=…, by poczekać na ukończenie.

Zobacz REST API po pełną listę endpointów.

  • Zwiększ batch size, jeśli Twój worker jest szybki i chcesz skończyć szybciej. Domyślne 50 jest konserwatywne.
  • Uruchom wiele workerówmessenger:consume async --limit=… może działać w równoległych procesach; warmup rozłoży się między nie.
  • Wyłącz logowanie inwalidacji podczas warmupu, jeśli Twoja baza logu inwalidacji jest na wolnym dysku — dashboard dostarcza te same liczby w pamięci.