Cache, głupcze! – czyli anegdota o cache’u w WordPressie

Czy zdarzyło się Wam kiedyś spędzić stresujące godziny, próbując dociec, dlaczego Wasz wordpressowy szablon nie działa, jak należy, by wreszcie zorientować się, że po prostu nie wyłączyliście cache’u na czas wprowadzania zmian? Chcę wierzyć, że przytrafia się to nawet najlepszym z nas 🙂 Całe szczęście, tego rodzaju przygody zazwyczaj kończą się happy endem, zostawiając nas po prostu z mieszaniną ulgi i frustracji, czasami przyprawioną szczyptą rozbawienia.

Wprowadzałem ostatnio awaryjną poprawkę do szablonu, który programowałem niedawno dla nowego klienta. Szablon powstał od podstaw, ponieważ klientowi zależało, aby strona wyglądała kropka w kropkę jak jego poprzednia witryna na Joomli. Jak to zwykle bywa, wkrótce po wdrożeniu pojawiła się potrzeba wprowadzenia kilku drobnych korekt. Podczas jednej z nich przydarzyła się moja przygoda z cache’m.

Wyłącz lub wyczyść cache, gdy aktualizujesz pliki szablonu wordpressowego

Sytuacja była prosta: musiałem pilnie zmodyfikować zapytanie pobierające treści z bazy danych, aby spełniało kryteria specyficznego sortowania. Nie dało się tego zrobić w standardowy sposób, musiałem napisać krótką funkcję, by otrzymać pożądany rezultat.

Rozwiązanie napisałem, rzecz jasna, w swoim środowisku deweloperskim, a widząc, że działa poprawnie, przeniosłem je na serwer stage, gdzie także spisywało się bez zarzutu. Zadowolony z takiego obrotu sprawy, zalogowałem się do instancji na serwerze produkcyjnym, zaimportowałem dane, następnie poprzez FTP wczytałem skorygowany plik szablonu i sprawdziłem, czy poprawiony front page wyświetla się, jak należy. Wyświetlał się. Wylogowałem się zatem z panelu administracyjnego i wróciłem na stronę główną.

Jakież było moje zdziwienie, gdy strona zaserwowała mi stary, niepoprawny widok. Ponownie się zalogowałem, ponownie wylogowałem – problem pozostał.

Następne półtorej godziny spędziłem analizując dokładnie, co przeoczyłem w kodzie, lecz nie znalazłem niczego. I wówczas zaświtała mi myśl, że chodzi po prostu o cache.

Tak, powinienem wpaść na to od razu. Nie wpadłem.

Odświeżenie cache’u natychmiast rozwiązało sprawę. Sprawę, której de facto nie było.

Który cache wordpressowy wybrać?

Cache, skądinąd, ma jednak głównie zalety i generalnie należy wyposażyć produkcyjną instalację WordPressa w jakieś rozwiązanie. Które wybrać?

Blogów, zestawiających ze sobą najpopularniejsze wordpressowe cache jest na pęczki, nie będę tego więc tutaj powtarzać. Wspomnę Wam tylko o dwóch rozwiązaniach, których sam używałem i wskażę, które obecnie jest moim faworytem.

WP Super Cache

Plugin ten utrzymywany jest przez Automattic, czyli ekipę stojącą w ogóle za WordPressem jako takim. Było to dla mnie istotne, gdy rozpoczynałem używanie tej wtyczki, gdyż założyłem, że będzie to najbardziej stabilne i niegenerujące problemów rozwiązanie. WP Super Cache jest łatwy w użyciu, ma kilka trybów funkcjonowania, z których zazwyczaj wystarczy ten najprostszy, polegający głównie na pstryknięciu włącznika. Strony zaczynają ładować się wyraźnie szybciej, rośnie ocena w GTmetrix czy Google Page Speed Insights. Jednak serwowanie statycznych HTML-i zamiast przetwarzania PHP jest zasadniczo jedyną funkcją tego pluginu. Niby dobrze, a jednak…

WP-Optimize

… a jednak potem odkryłem WP-Optimize, rozwijane przez Updraft – ekipę, która stworzyła też rewelacyjny system do automatycznych backupów (też polecam).

WP-Optimize to nie tylko cache wordpressowy, ale też dodatkowe narzędzia, które znacząco przyśpieszają działanie strony. Z wielu dostępnych funkcji warto wymienić:

  1. Możliwość optymalizacji bazy danych.
  2. Możliwość automatycznej kompresji mediów.
  3. Kompresję (minify) i łączenie arkuszy CSS, plików HTML i skryptów JS, by zredukować liczbę zapytań generowanych podczas otwierania strony.
  4. Wpływ na sposób ładowania czcionek.

WP-Optimize daje znacznie większe pole manewru, niż WP Super Cache, dlatego też nie zastanawiałem się długo, nim zdecydowałem, że to będzie mój nowy domyślny plugin cache.

Cache’uj, ale z głową

Cache wordpressowy to dobra rzecz, nie wahajcie się go używać. Użytkownicy tworzonych przez Was stron na pewno się ucieszą, nie musząc czekać kilka sekund na wyświetlenie widoku (bo wiadomo, żyjemy w czasach, gdy skupienie uwagi na dłużej, niż kilka sekund bywa wyzwaniem).

Warto jednak zaznaczyć, że w niektórych sytuacjach cache’owanie stron może skutkować wadliwym wyświetlaniem treści. Mam tu na myśli np. sklepy internetowe, strony z kalendarium wydarzeń, często aktualizowane serwisy informacyjne itp. We wspomnianych przypadkach zapamiętywanie statycznych plików celem szybszego serwowania contentu może np. spowodować wyświetlanie nieaktualnych postów, eventów czy produktów. Aby tego uniknąć, musimy zapoznać się z wszystkimi opcjami ustawień używanego pluginu, ponieważ z reguły mamy możliwość precyzyjnej konfiguracji, co i na jak długo ma być cache’owane. Racjonalnym rozwiązaniem jest więc wskazanie wyjątków, które będą serwowane zawsze dynamicznie bądź skrócenie czasu przechowywania zapisanych widoków.