Cache w WordPress – page cache, object cache, edge cache i Speculative Loading w praktyce

Opublikowano: 20 maja 2026 · Autor: Marcin Szewczyk-Wilgan

Typowa strona WordPress wykonuje od 50 do 200 zapytań do bazy danych przy każdym załadowaniu. Sklep WooCommerce z rozbudowanym katalogiem potrafi przekroczyć 500 zapytań na odsłonę. Bez cachowania każde z tych zapytań trafia bezpośrednio do MySQL, co przekłada się na czas odpowiedzi serwera (TTFB), wyniki Core Web Vitals i pozycje w wyszukiwarce. Cache to nie jedna technologia, lecz zestaw warstw, z których każda rozwiązuje inny problem. Włączenie wtyczki cache bez zrozumienia tych warstw daje w najlepszym razie połowiczne efekty, a w najgorszym generuje trudne do zdiagnozowania konflikty. Ten artykuł opisuje wszystkie warstwy cachowania dostępne w ekosystemie WordPress, wyjaśnia, kiedy i dlaczego każda z nich ma sens, i pokazuje, jak je diagnostykować.

Warstwy cache w WordPress od serwera do przeglądarki

Cache w WordPressie to stos kilku niezależnych mechanizmów. Każdy działa na innym poziomie i rozwiązuje inny wąski punkt wydajnościowy. Zrozumienie, co robi każda warstwa, pozwala dobrać strategię cachowania do konkretnej strony zamiast stosować uniwersalne recepty.

OPcache (bytecode cache) OPcache kompiluje pliki PHP do bytecodu i przechowuje go w pamięci. Bez OPcache każde żądanie oznacza ponowną kompilację setek plików PHP WordPressa. OPcache jest wbudowany w PHP od wersji 5.5 i powinien być włączony na każdym serwerze produkcyjnym. Konfiguracja wymaga dopasowania opcache.memory_consumption do liczby plików PHP na serwerze. To fundament, na którym opierają się pozostałe warstwy.
Object cache (Redis / Memcached) Object cache zapisuje wyniki zapytań do bazy danych w pamięci RAM. WordPress ma wbudowany mechanizm WP_Object_Cache, ale domyślnie nie jest trwały, co oznacza, że dane są tracone po zakończeniu żądania. Redis lub Memcached nadają mu trwałość: wyniki zapytań przeżywają kolejne odsłony strony. To jedyna warstwa, która realnie przyspiesza strony dla zalogowanych użytkowników i panel administracyjny WordPress.
Page cache Page cache zapisuje gotową stronę HTML na dysku lub w pamięci i serwuje ją kolejnym odwiedzającym bez uruchamiania PHP i zapytań do bazy. Eliminuje cały stos przetwarzania WordPress dla niezalogowanych użytkowników. Może działać na poziomie wtyczki (WP Rocket, WP Super Cache, LiteSpeed Cache) lub na poziomie serwera (FastCGI cache w Nginx, Varnish, LiteSpeed).
CDN / Edge cache CDN (Content Delivery Network) dystrybuuje pliki statyczne (CSS, JS, obrazy) i opcjonalnie pełne strony HTML na serwery brzegowe rozmieszczone na całym świecie. Użytkownik pobiera zasoby z najbliższego punktu PoP (Point of Presence), co redukuje latencję fizyczną. Cloudflare APO cachuje pełne strony WordPress na edge za ok. 5 USD/mies. i potrafi zejść z TTFB poniżej 100 ms dla cachowanych treści.
Browser cache Browser cache instruuje przeglądarkę użytkownika, by przechowywała pliki statyczne lokalnie na dysku. Kontrolowany nagłówkami Cache-Control i Expires. Przy kolejnej wizycie przeglądarka nie pobiera ponownie CSS, JS i obrazów. Najskuteczniejsza warstwa dla powracających użytkowników, ale nie przyspiesza pierwszej wizyty.
Speculative Loading Od WordPressa 6.8 przeglądarka może wstępnie pobrać (prefetch) lub w pełni wyrenderować (prerender) strony, na które użytkownik prawdopodobnie przejdzie. Oparty na Speculation Rules API, mechanizm działa w przeglądarkach Chromium i w testach wykazuje redukcję LCP nawet o 98% w trybie prerender z eagerness moderate. Nie obciąża serwerów, które go nie wspierają. To najnowsza warstwa w stosie cache WordPress.

Object cache: Redis vs Memcached

Object cache to warstwa, która robi największą różnicę na stronach z zalogowanymi użytkownikami, rozbudowanymi panelami administracyjnymi i sklepami WooCommerce. Page cache obsługuje ruch anonimowy, ale nie pomaga tam, gdzie treść jest dynamiczna. Wtyczka object cache (np. Redis Object Cache, Object Cache Pro) nie dostarcza samego Redis, lecz łączy WordPressa z serwerem Redis zainstalowanym na hoście. Bez Redis lub Memcached na serwerze żadna wtyczka nie zapewni trwałego object cache.

Redis

Trwałość, struktury danych i replikacja

Redis oferuje trwałość danych (RDB/AOF), co oznacza, że cache przeżywa restart serwera i nie trzeba go odbudowywać od zera. Obsługuje złożone struktury (hash, sorted set, list), co pozwala np. aktualizować pojedyncze pole bez pobierania całego obiektu. Wspiera replikację i klasteryzację (Redis Sentinel, Redis Cluster) dla środowisk z wysoką dostępnością. WordPress Site Health od wersji 6.1 aktywnie rekomenduje persistent object cache, a Redis jest domyślnym wyborem większości managed hostingów.

Memcached

Prostota i szybkość dla prostych kluczy

Memcached jest wielowątkowy i w testach syntetycznych bywa nieco szybszy od Redis przy prostych operacjach GET/SET na wielu rdzeniach. Jest prostszy w konfiguracji i zużywa mniej pamięci na klucz. Główna wada: brak trwałości. Po restarcie serwera cały cache jest pusty, co generuje chwilowy skok obciążenia bazy danych (tzw. stampede). Dla WordPress wybór Memcached ma sens, gdy hosting nie oferuje Redis, lub na stronach z bardzo prostymi wzorcami dostępu do danych.

Konfiguracja

Praktyczne wskazówki

Jeśli PHP i Redis działają na tym samym serwerze, używaj gniazda Unix (Unix socket) zamiast TCP, co eliminuje narzut sieciowy. Ustaw politykę ewikacji na volatile-lru, by Redis usuwał najstarsze klucze z ustawionym TTL, a nie losowe dane. W instalacjach multisite przydzielaj oddzielne prefiksy kluczy per strona. W wp-config.php definiuj WP_REDIS_HOST, WP_REDIS_PORT (lub WP_REDIS_PATH dla socketa) i unikalny WP_CACHE_KEY_SALT.

Kiedy nie pomaga

Nie każda strona potrzebuje object cache

Prosta strona firmowa bez logowania, z kilkuset odsłonami dziennie, zyska więcej z prawidłowo skonfigurowanego page cache niż z Redis. Object cache przyspiesza panel administracyjny, ale jeśli administratorem jest jedna osoba, efekt jest minimalny. Na tanim hostingu współdzielonym Redis zwykle nie jest dostępny, a instalowanie go samodzielnie mija się z celem. Koncentruj się na page cache i optymalizacji bazy danych.

Page cache: wtyczkowy, serwerowy i różnica, która ma znaczenie

Page cache to warstwa o największym wpływie na TTFB dla niezalogowanych użytkowników. Eliminuje cały stos WordPress (PHP, MySQL, motywy, wtyczki) i serwuje gotowy HTML. Może działać na dwóch poziomach, które różnią się zasadniczo pod względem wydajności.

Page cache wtyczkowy Wtyczki takie jak WP Rocket, WP Super Cache czy W3 Total Cache generują pliki HTML i zapisują je na dysku. Przy kolejnym żądaniu WordPress sprawdza, czy istnieje cachowany plik i serwuje go zamiast przetwarzać stronę od nowa. Problemem jest to, że PHP nadal musi się uruchomić, żeby sprawdzić cache. To szybsze niż pełne przetwarzanie, ale wolniejsze niż rozwiązanie serwerowe, które omija PHP całkowicie.
Page cache serwerowy FastCGI cache w Nginx, Varnish, LiteSpeed Cache z serwerem LiteSpeed lub cache Apache z mod_cache operują na poziomie web serwera i serwują cachowany HTML bez uruchamiania PHP. Oznacza to, że żądanie nie trafia do WordPressa w ogóle. Różnica w TTFB jest mierzalna: page cache wtyczkowy daje zazwyczaj 100 do 300 ms, page cache serwerowy schodzi poniżej 50 ms na tym samym sprzęcie.
Invalidacja cache Największe wyzwanie page cache to invalidacja: kiedy wyczyścić cache, żeby użytkownik widział aktualną treść? Nowy post, edycja strony, zmiana menu, nowy komentarz, zmiana ceny w WooCommerce – każda z tych akcji może wymagać odświeżenia cachowanych stron. Wtyczki cache integrują się z hookami WordPress i automatyzują invalidację. Konfiguracja serwerowa (FastCGI, Varnish) wymaga ręcznego ustawienia reguł purge, co jest trudniejsze, ale daje pełną kontrolę.
Kiedy page cache nie działa Page cache nie może obsłużyć stron dynamicznych: koszyk WooCommerce, panel klienta, wyniki wyszukiwania, strony z personalizacją. Dla zalogowanych użytkowników cache jest zwykle pomijany, bo treść różni się między użytkownikami. Dlatego sklepy WooCommerce potrzebują zarówno page cache (dla katalogu produktów, anonimowych odwiedzających), jak i object cache (dla koszyka, checkoutu, panelu administracyjnego).

CDN i edge cache: cachowanie bliżej użytkownika

Page cache i object cache rozwiązują problem generowania odpowiedzi na serwerze origin. CDN rozwiązuje problem dostarczenia tej odpowiedzi do użytkownika. Jeśli serwer stoi w Niemczech, a użytkownik łączy się z Australii, fizyczna odległość dodaje 200 do 400 ms latencji niezależnie od tego, jak szybki jest serwer. CDN eliminuje ten problem, serwując treść z najbliższego punktu edge.

Statyczny CDN

Pliki statyczne na serwerach brzegowych

Podstawowa konfiguracja CDN dystrybuuje pliki CSS, JavaScript, obrazy i fonty. Serwer origin nadal generuje HTML. To standard, który powinien działać na każdej stronie WordPress. Konfiguracja polega na wskazaniu CDN jako źródła zasobów statycznych (przez wtyczkę lub zmianę URL w konfiguracji motywu). Zmniejsza obciążenie serwera origin i przyspiesza ładowanie zasobów.

Full-page edge cache

Pełne strony HTML na edge

Cloudflare APO (Automatic Platform Optimization) cachuje pełne strony WordPress na serwerach edge, nie tylko zasoby statyczne. Oznacza to, że żądanie HTML nie trafia do serwera origin w ogóle. Dla stron z międzynarodowym ruchem to zmiana jakościowa: TTFB poniżej 100 ms niezależnie od lokalizacji użytkownika. APO automatycznie invaliduje cache przy zmianach w WordPressie i obsługuje dynamiczne nagłówki (cookies, nonce).

Ograniczenia

Kiedy edge cache nie wystarczy

Strony z bardzo częstą publikacją (kilka razy dziennie) mogą mieć problem z aktualnością cache na edge, bo propagacja invalidacji między punktami PoP wymaga czasu. Strony z zalogowanymi użytkownikami (WooCommerce, fora, LMS) nie korzystają z full-page edge cache dla sesji zalogowanych. Dynamiczne treści wymagają rozwiązań hybrydowych: edge cache dla anonimowych odwiedzających, object cache i page cache serwerowy dla reszty.

Speculative Loading: najnowsza warstwa w stosie cache WordPress

WordPress 6.8 wprowadził natywne wsparcie dla Speculation Rules API, co jest jedną z najważniejszych zmian wydajnościowych ostatnich lat. To warstwa, która działa po stronie przeglądarki i nie obciąża serwera. Jej zadaniem jest skrócenie postrzeganego czasu ładowania stron wewnętrznych do niemal zera.

Prefetch vs prerender Prefetch pobiera zasoby (HTML, CSS, JS) strony docelowej w tle i przechowuje je w cache przeglądarki. Strona nie jest renderowana, aż użytkownik kliknie. Prerender idzie dalej: przeglądarka pobiera, parsuje i renderuje stronę w tle, włącznie z wykonaniem JavaScript i budowaniem DOM. Po kliknięciu strona pojawia się natychmiast. WordPress 6.8 domyślnie stosuje prefetch z eagerness conservative. Po przełączeniu na prerender z eagerness moderate redukcja LCP sięga 98%.
Konfiguracja w WordPress Domyślne ustawienie WordPressa (prefetch, conservative) jest bezpieczne, ale daje niewielki efekt. Dla widocznej poprawy wydajności warto przełączyć na prerender z eagerness moderate przez filtr wp_speculation_rules_configuration w functions.php lub przez dedykowaną wtyczkę Speculative Loading, która udostępnia interfejs w Ustawieniach. Speculative Loading działa domyślnie tylko dla niezalogowanych użytkowników, co jest rozsądne, bo strony dynamiczne nie są dobrymi kandydatami do prerenderingu.
Wsparcie przeglądarek Speculation Rules API jest wspierany w przeglądarkach Chromium (Chrome, Edge, Opera) od wersji 121, co obejmuje około 79% globalnego rynku przeglądarek. Firefox i Safari ignorują reguły spekulatywne bez żadnych negatywnych efektów. Użytkownicy tych przeglądarek po prostu ładują strony w tradycyjny sposób. Chrome ogranicza prerender do maksymalnie dwóch stron jednocześnie (przy eagerness moderate), co chroni przed nadmiernym zużyciem pamięci.
Wykluczenia WordPress automatycznie wyklucza z prerenderingu strony administracyjne (/wp-admin/), stronę logowania, URLe z tokenami nonce i linki z atrybutem rel="nofollow". Możesz dodać własne wykluczenia (np. koszyk, checkout, strony z formularzami) przez filtr plsr_speculation_rules_href_exclude_paths lub dodanie klasy CSS no-prerender do wybranych linków.

Dobór strategii cache do typu strony

Nie istnieje uniwersalna konfiguracja cache. Strona firmowa, blog, sklep WooCommerce i portal z logowaniem mają fundamentalnie różne wzorce ruchu i różne wąskie gardła. Poniżej przedstawiamy rekomendacje oparte na doświadczeniach z wielu wdrożeń w ramach opieki WordPress w WebOptimo.

Strona firmowa / wizytówka

Page cache + CDN + Speculative Loading

Ruch głównie anonimowy, rzadkie aktualizacje treści. Page cache (najlepiej serwerowy) eliminuje PHP. CDN skraca latencję dla odległych użytkowników. Speculative Loading (prerender, moderate) daje natychmiastowe przejścia między podstronami. Object cache opcjonalny, bo jedynym zalogowanym użytkownikiem jest administrator. OPcache obowiązkowy. Typowy TTFB: poniżej 100 ms.

Blog / serwis contentowy

Page cache + CDN + Object cache + Speculative Loading

Częstsze publikacje wymagają sprawnej invalidacji cache. Object cache przyspiesza generowanie nowych stron i panel administracyjny przy dużej liczbie postów. CDN z pełnym edge cache (Cloudflare APO) jest tu szczególnie wartościowy, bo ruch jest globalny i głównie anonimowy. Speculative Loading działa świetnie na stronach z dużą liczbą linków wewnętrznych (posty powiązane, kategorie).

Sklep WooCommerce

Page cache + Object cache (Redis) + CDN + selektywne wykluczenia

WooCommerce to najbardziej wymagający scenariusz. Katalog produktów korzysta z page cache, ale koszyk, checkout, panel klienta i strony z dynamicznymi cenami muszą być wykluczone. Redis jest tu niezbędny, bo przyspiesza setki zapytań związanych z sesjami, wariantami produktów i stanami magazynowymi. Speculative Loading z wykluczeniem koszyka i checkoutu. Edge cache dla stron produktowych, ale nie dla sesji zalogowanych.

Portal z logowaniem / LMS

Object cache (Redis) + fragment cache + ograniczony page cache

Większość ruchu to zalogowani użytkownicy, więc page cache ma ograniczone zastosowanie. Redis object cache to główna warstwa wydajnościowa. Fragment caching (ESI w Varnish, AJAX lazy load) pozwala cachować części strony, które są wspólne dla użytkowników, i ładować dynamicznie tylko spersonalizowane elementy. Page cache działa wyłącznie dla stron publicznych (landing page, cennik, blog). TTFB zależy głównie od konfiguracji PHP-FPM i Redis.

Diagnostyka: jak sprawdzić, czy cache działa

Włączenie cache bez weryfikacji, czy faktycznie działa, to częsty błąd. Poniższe narzędzia i metody pozwalają potwierdzić, że każda warstwa cache funkcjonuje prawidłowo i faktycznie poprawia wydajność.

Query Monitor Wtyczka Query Monitor to podstawowe narzędzie diagnostyczne WordPress. Pokazuje liczbę zapytań do bazy, czas ich wykonania, status object cache (czy persistent cache jest aktywny) i szczegóły każdego zapytania. Po włączeniu Redis prawidłowo działający object cache powinien pokazywać „Persistent Cache: true" i znacząco zmniejszoną liczbę zapytań trafiających do MySQL.
Nagłówki HTTP Nagłówki odpowiedzi HTTP informują o stanie page cache i CDN. X-FastCGI-Cache: HIT oznacza trafienie w cache Nginx. CF-Cache-Status: HIT to trafienie w Cloudflare. X-Cache: HIT pojawia się w wielu konfiguracjach CDN. Wartość MISS oznacza, że cache nie został trafiony i strona była generowana od nowa. Sprawdzaj nagłówki poleceniem curl -I lub w zakładce Network narzędzi deweloperskich przeglądarki.
Redis CLI Polecenie redis-cli MONITOR pokazuje w czasie rzeczywistym wszystkie operacje na Redis. Pozwala zobaczyć, czy WordPress rzeczywiście zapisuje i odczytuje dane z cache. redis-cli INFO stats podaje stosunek trafień do chybień (keyspace_hits vs keyspace_misses). Zdrowy cache powinien mieć hit ratio powyżej 85%. Niższy stosunek sugeruje zbyt małą ilość pamięci lub zbyt agresywną politykę ewikacji.
Speculative Loading W Chrome DevTools otwórz zakładkę Application, następnie Speculative loads. Zobaczysz listę URLi, ich status (Not triggered, Prefetched, Prerendered, Failure) i przyczynę ewentualnego niepowodzenia. W zakładce Network zasoby pobrane spekulatywnie wyświetlają się z priorytetem Lowest. Możesz też sprawdzić, czy reguły spekulatywne są poprawnie wstawiane, szukając tagu <script type="speculationrules"> w źródle strony.
Punkty odniesienia TTFB TTFB (Time to First Byte) to najlepsza pojedyncza metryka do oceny skuteczności cache. Strona z page cache serwerowym: poniżej 50 ms. Z page cache wtyczkowym: 100 do 300 ms. Bez page cache, z object cache: 200 do 600 ms. Bez żadnego cache: 500 ms do kilku sekund. Mierz TTFB dla niezalogowanych użytkowników (anonimowa sesja) z różnych lokalizacji. Narzędzia: PageSpeed Insights, WebPageTest, GTmetrix, curl -w "%{time_starttransfer}".

Podsumowanie

Cache w WordPress to nie pojedynczy przełącznik, lecz stos warstw, z których każda odpowiada za inny etap dostarczania strony. OPcache przyspiesza kompilację PHP. Object cache (Redis, Memcached) odciąża bazę danych. Page cache eliminuje przetwarzanie WordPress dla anonimowego ruchu. CDN skraca odległość fizyczną do użytkownika. Browser cache oszczędza ponowne pobieranie zasobów. Speculative Loading sprawia, że przejścia między stronami są postrzegane jako natychmiastowe. Żadna z tych warstw nie zastępuje pozostałych. Ich siła leży w kombinacji dobranej do typu strony, wzorców ruchu i infrastruktury hostingowej.

W WebOptimo konfiguracja stosu cache jest częścią każdego wdrożenia i planu opieki WordPress. Dobieramy warstwy do konkretnej strony, monitorujemy hit ratio i TTFB, i optymalizujemy konfigurację w miarę zmian w ruchu i treściach. Jeśli Twoja strona jest wolna mimo zainstalowanej wtyczki cache, skontaktuj się z nami po diagnostykę i konfigurację, która naprawdę działa.

Najczęstsze pytania o cache w WordPress

Page cache zapisuje gotowy HTML i serwuje go bez uruchamiania PHP. Działa dla niezalogowanych użytkowników. Object cache (Redis, Memcached) zapisuje wyniki zapytań do bazy w RAM i przyspiesza strony dynamiczne, panel administracyjny i ruch zalogowanych użytkowników. Obie warstwy się uzupełniają.

Redis jest szczególnie wartościowy dla WooCommerce, forów i portali z logowaniem, gdzie page cache nie działa. Dla prostych stron firmowych bez logowania korzyści są mniejsze, choć Redis nadal przyspiesza panel administracyjny. WordPress Site Health aktywnie rekomenduje persistent object cache.

Redis jest lepszym wyborem w większości przypadków: oferuje trwałość danych, replikację i złożone struktury danych. Memcached jest prostszy i bywa szybszy przy prostych operacjach, ale traci cały cache po restarcie. W praktyce wybór często zależy od oferty dostawcy hostingu.

Mechanizm wbudowany w WordPress od wersji 6.8, oparty na Speculation Rules API. Pozwala przeglądarce wstępnie pobrać lub wyrenderować strony, na które użytkownik prawdopodobnie przejdzie. W trybie prerender z eagerness moderate testy wykazują redukcję LCP nawet o 98%. Działa w przeglądarkach Chromium.

Nie. Page cache generuje statyczny HTML na serwerze origin. CDN dystrybuuje go na serwery brzegowe bliżej użytkownika. Page cache bez CDN jest szybkie lokalnie, ale wolne na odległość. CDN bez page cache dystrybuuje dynamiczne odpowiedzi z ograniczoną korzyścią. Najskuteczniejsza jest kombinacja obu warstw.

Zainstaluj Query Monitor, by zobaczyć liczbę zapytań i status object cache. Sprawdź nagłówki HTTP (X-Cache, CF-Cache-Status) poleceniem curl lub w narzędziach deweloperskich przeglądarki. Dla Redis użyj redis-cli INFO stats i sprawdź hit ratio (powinno być powyżej 85%). TTFB poniżej 200 ms dla cachowanych stron to dobry punkt odniesienia.

Potrzebujesz konfiguracji cache dla WordPress?

Zdiagnozujemy wąskie gardła wydajnościowe, dobierzemy warstwy cache do Twojej strony i skonfigurujemy je na serwerze. Bez zobowiązań, konkretna propozycja po krótkiej rozmowie.

Telefon

+48 608 271 665

Pn–Pt, 8:00–16:00

E-mail

kontakt@weboptimo.pl

Odpowiadamy w ciągu 24h

Firma

WebOptimo

NIP: 6391758393