Cache WordPress - jak prawidłowo skonfigurować?
Bez pamięci podręcznej każde wejście na stronę uruchamia PHP i kilkadziesiąt zapytań do bazy, żeby zbudować dokładnie ten sam wynik, co minutę wcześniej. Cache zapisuje gotowy rezultat i podaje go od razu. Problem w tym, że nie wszystko wolno zapamiętać. Koszyk, panel klienta i formularze muszą być za każdym razem świeże, a większość awarii po wdrożeniu cache bierze się właśnie z braku wykluczeń.
Cztery warstwy pamięci podręcznej
Nazywa się je tak samo, ale robią zupełnie co innego.
| Warstwa | Co zapisuje | Największy zysk |
|---|---|---|
| Cache strony | gotowy HTML podstrony | witryny z treścią, blogi, strony firmowe |
| Cache obiektów | wyniki zapytań do bazy | sklepy i witryny z dużą liczbą wpisów |
| Cache opcode | skompilowany kod PHP | każda witryna, działa po stronie serwera |
| Cache przeglądarki | pliki statyczne u użytkownika | powracający odwiedzający |
Cache strony daje największy skok przy witrynie firmowej, bo eliminuje całe generowanie. W sklepie działa słabiej, bo znaczna część ruchu ma koszyk i wypada spod pamięci podręcznej. Tam więcej daje cache obiektów.
Cache opcode zwykle jest już włączony po stronie hostingu i nie wymaga wtyczki. Warto tylko sprawdzić, czy nie został wyłączony przy migracji.
Jedna wtyczka, nigdy trzy
Najczęstszy błąd przy przejmowaniu witryn to kilka wtyczek cache włączonych naraz. Zamiast się sumować, nadpisują sobie reguły, a efektem są nieaktualne strony i koszyk pokazujący cudze produkty.
Wybierz jedną i wyłącz resztę, usuwając też ich pliki konfiguracyjne. Część wtyczek zostawia po sobie wpisy w `wp-config.php` i katalogi w `wp-content`, które działają nawet po dezaktywacji.
Trzy wtyczki cache to najczęstsza rzecz, jaką wyłączamy przy przejmowaniu witryn. Zwykle każda została dołożona przez innego wykonawcę, w dobrej wierze i bez sprawdzenia, co już jest.
Krzysztof Czapnik, KC Mobile
Co trzeba wykluczyć z cache?
To najważniejsza część konfiguracji i jedyna, która potrafi zepsuć sprzedaż.
- Koszyk, kasa i strona podziękowania za zamówienie
- Panel klienta i wszystkie widoki po zalogowaniu
- Strony z formularzami, jeśli zawierają zabezpieczenie tokenem
- Wyniki wyszukiwarki wewnętrznej
- Podglądy wpisów i cała administracja
Przy sklepie WooCommerce dobre wtyczki wykluczają te adresy automatycznie, ale warto to sprawdzić ręcznie. Test jest prosty: dodaj produkt do koszyka w oknie prywatnym, otwórz stronę w drugim oknie i sprawdź, czy koszyk jest pusty.
Osobno wyklucz ciasteczka sesji i zalogowanych użytkowników. Bez tego zdarza się najgorszy możliwy przypadek: jeden klient widzi zawartość koszyka drugiego.
Ustawienia, które warto włączyć
Poza samym zapisem strony wtyczki oferują kilka opcji, które realnie skracają czas ładowania.
Łączenie i minifikacja plików stylów oraz skryptów zmniejsza liczbę żądań. Przy nowoczesnym protokole zysk jest mniejszy niż kiedyś, ale minifikacja sama w sobie nadal opłaca się zawsze.
Opóźnienie skryptów, które nie są potrzebne do pierwszego widoku, przenosi je poza krytyczną ścieżkę. To najskuteczniejsza z tych opcji i jednocześnie najbardziej ryzykowna, bo potrafi zepsuć suwaki i formularze.
Wstępne generowanie stron sprawia, że pierwszy odwiedzający po wyczyszczeniu pamięci nie czeka na zbudowanie strony. Przy dużym serwisie warto to ograniczyć do najważniejszych adresów, bo generowanie kilkudziesięciu tysięcy podstron obciąża serwer bardziej niż ruch.
Cache po stronie serwera i CDN
Najszybszy cache to ten, który odpowiada, zanim zapytanie w ogóle dotrze do PHP. Hosting zarządzany pod WordPressa zwykle ma go wbudowanego i wtedy wtyczka jest zbędna albo wręcz szkodliwa.
Według ofert popularnych hostingów pakiety za 20-30 zł miesięcznie rzadko mają cache serwerowy, więc tam wtyczka jest jedynym wyjściem. Hosting zarządzany, od 100-300 zł miesięcznie, ma go standardowo.
Warstwa najdalej wysunięta to CDN, który może podawać całe strony ze swojej pamięci. Dla witryny firmowej to znaczące odciążenie serwera, dla sklepu wymaga ostrożnej konfiguracji wykluczeń. Kiedy się opłaca, opisujemy w poradniku CDN - co to jest.
Zasada porządkująca: warstwy mają się uzupełniać, nie dublować. Cache serwerowy plus wtyczka robiąca to samo to prosta droga do stron, które nie chcą się odświeżyć.
Cache obiektów: kiedy naprawdę go potrzebujesz
Cache strony nie pomaga tam, gdzie każdy użytkownik widzi coś innego. W sklepie dotyczy to koszyka i panelu klienta, w serwisie z logowaniem większości widoków. Wtedy wchodzi cache obiektów.
Zapisuje on wyniki zapytań do bazy, więc przy budowaniu strony WordPress nie pyta o to samo dziesiątki razy. Zysk rośnie z liczbą wpisów: przy witrynie z dwustoma stronami jest niewielki, przy sklepie z kilkoma tysiącami produktów bywa większy niż z cache strony.
Wymaga jednak wsparcia po stronie serwera, najczęściej Redisa albo Memcached. Według ofert popularnych hostingów pakiety za 20-30 zł miesięcznie zwykle tego nie mają, więc przy dużym sklepie to argument za mocniejszym pakietem, a nie za kolejną wtyczką.
Uwaga na typowy błąd: cache obiektów bez wsparcia serwera zapisuje dane do bazy, czyli dokładnie tam, gdzie miał odciążyć. Skutkiem jest wolniejsza witryna i puchnąca tabela z danymi tymczasowymi.
Jak sprawdzić, czy cache działa?
Otwórz stronę w oknie prywatnym i zajrzyj w nagłówki odpowiedzi w narzędziach przeglądarki. Większość rozwiązań dodaje własny nagłówek informujący, czy odpowiedź przyszła z pamięci podręcznej.
Drugi test to czas do pierwszego bajtu przed i po. Przy działającym cache strony powinien spaść wyraźnie, zwykle poniżej 200 milisekund.
Trzeci, najważniejszy przy sklepie: przejdź całą ścieżkę zakupu w oknie prywatnym. Dodanie do koszyka, przejście do kasy, wybór dostawy. Jeśli koszyk gubi produkty albo kasa pokazuje nieaktualne kwoty, wykluczenia są źle ustawione.
Po każdej zmianie w treści sprawdź, czy zmiana jest widoczna dla niezalogowanego użytkownika. Redaktor zwykle widzi świeżą wersję, bo jest zalogowany, i dlatego problem z odświeżaniem wychodzi dopiero po zgłoszeniu od klienta.
Najczęstsze problemy po wdrożeniu
| Objaw | Przyczyna | Naprawa |
|---|---|---|
| Zmiany w treści nie są widoczne | strona wisi w pamięci | skrócenie czasu życia, czyszczenie po publikacji |
| Koszyk gubi produkty | brak wykluczeń dla sklepu | wykluczenie adresów i ciasteczek sesji |
| Formularz zwraca błąd tokenu | zapamiętana strona z nieaktualnym zabezpieczeniem | wykluczenie adresu formularza |
| Rozjechany układ po włączeniu minifikacji | konflikt połączonych plików | wyłączenie łączenia, sama minifikacja |
| Suwak przestał działać | opóźnienie skryptów | wykluczenie biblioteki suwaka |
Reguła praktyczna: włączaj opcje pojedynczo i po każdej sprawdzaj stronę główną, kartę produktu i formularz. Włączenie dziesięciu przełączników naraz kończy się szukaniem winnego przez godzinę.
Ile to daje i ile kosztuje?
Cache jest najtańszym skokiem wydajności na witrynie treściowej, bo eliminuje całe generowanie strony. Przy sklepie zysk jest mniejszy, ale nadal wyraźny na listach produktów i stronach kategorii.
Według naszego cennika konfiguracja cache wchodzi w zakres podstawowej optymalizacji, czyli 500-1500 zł razem z obrazami i minifikacją. Dane z naszych wdrożeń pokazują, że przy witrynie bez cache sam ten krok skraca czas odpowiedzi serwera o rząd wielkości, z okolic sekundy do poniżej 200 milisekund.
Efekty widać od razu po wdrożeniu, w przeciwieństwie do zmian w treści. Konfigurujemy to jednorazowo albo w ramach opieki nad stroną WordPress - napisz przez formularz na stronie kontakt.
Korzyści
- Jedna warstwa cache zamiast trzech wtyczek nadpisujących sobie reguły
- Wykluczenia dla koszyka, kasy i formularzy ustawione i przetestowane
- Sprawdzamy, czy hosting nie ma już cache po stronie serwera, zanim dołożymy wtyczkę
- Test całej ścieżki zakupu po wdrożeniu, nie tylko strony głównej