Optymalizacja WooCommerce warstwa po warstwie: cache, Redis, baza danych i Core Web Vitals
Wolny sklep WooCommerce rzadko ma jedną przyczynę. Strona produktu może czekać na PHP, na bazę danych albo na obrazy i skrypty w przeglądarce, a pojedyncza wtyczka przyspieszająca zwykle obejmuje tylko część tych warstw. Dlatego optymalizację warto prowadzić warstwa po warstwie: od konfiguracji serwera i cache, przez bazę danych, po sposób ładowania zasobów.
Kontekst
WooCommerce łączy treści, które dobrze się buforują, z danymi, które muszą być generowane dla konkretnego klienta. Do tej drugiej grupy należą przede wszystkim:
- koszyk i proces składania zamówienia;
- panel klienta i strony konta użytkownika;
- fragmenty interfejsu pokazujące zawartość koszyka;
- indywidualne ceny, rabaty i dane zależne od zalogowanego użytkownika.
Do tego dochodzą zasoby wielu wtyczek, ładowane także na stronach, które z nich nie korzystają, oraz baza danych, która rośnie razem ze sklepem: dane tymczasowe, historia operacji, metadane produktów i pozostałości po usuniętych wtyczkach.
Każdy z tych obszarów może być wąskim gardłem. Strona główna, kategoria, karta produktu, koszyk i zamówienie mogą przy tym mieć zupełnie inne ograniczenia, więc warto je mierzyć osobno.
Rozwiązanie
Cache na właściwym poziomie
W zależności od architektury serwera stosuje się różne poziomy buforowania:
- Redis Object Cache: wyniki operacji i zapytań w pamięci, mniej pracy dla bazy danych;
- Varnish Cache: buforowanie odpowiedzi HTTP na poziomie reverse proxy;
- NGINX FastCGI Cache: buforowanie wygenerowanych odpowiedzi PHP bezpośrednio na serwerze;
- Browser Cache: przechowywanie statycznych zasobów w pamięci przeglądarki.
Najważniejsze jest rozdzielenie treści statycznych i dynamicznych. Źle skonfigurowany cache w WooCommerce może pokazywać nieaktualne dane, psuć koszyk, a nawet ujawniać zawartość sesji innych klientów.
WP_CACHE i Redis
Stała WP_CACHE w pliku wp-config.php pozwala WordPressowi korzystać z mechanizmów buforowania dostarczanych przez odpowiednie komponenty:
define( 'WP_CACHE', true );Sama stała nie uruchamia jednak Redis ani nie buforuje stron. Potrzebny jest trwały object cache, działające połączenie z serwerem Redis i sprawdzenie, czy buforowanie faktycznie działa: liczba operacji odczytu i zapisu, współczynnik trafień cache oraz wpływ na zapytania SQL.
LiteSpeed Cache czy WP Rocket
Wybór wtyczki powinien wynikać z infrastruktury, a nie z jej popularności. LiteSpeed Cache integruje się z serwerami LiteSpeed i OpenLiteSpeed, w tym z buforowaniem stron i Edge Side Includes (ESI). WP Rocket oferuje mechanizmy optymalizacji frontendu i buforowania, które działają w różnych środowiskach hostingowych. Wynik zależy od serwera, konfiguracji cache, liczby produktów, wtyczek i charakterystyki ruchu.
Wyjątki dla elementów dynamicznych
Tam, gdzie środowisko na to pozwala, wybrane fragmenty dynamiczne można generować niezależnie przez ESI. W innych konfiguracjach trzeba zdefiniować wyjątki cache, reguły dotyczące cookies i obsługę sesji WooCommerce. Cel jest jeden: buforować jak najwięcej, nie naruszając poprawności procesu zakupowego.
Obrazy
Obrazy produktów należą do zasobów, które najmocniej wpływają na czas ładowania. Optymalizacja obejmuje:
- konwersję do formatów WebP i AVIF;
- rozmiary dopasowane do różnych urządzeń oraz atrybuty
srcsetisizes; - lazy loading dla grafik poza widocznym obszarem strony;
- priorytetowe ładowanie kluczowych obrazów w pierwszym widoku.
Obrazu LCP (Largest Contentful Paint) nie należy opóźniać lazy loadingiem. Atrybuty width i height oraz CSS aspect-ratio pozwalają przeglądarce wcześniej zarezerwować miejsce na grafikę, co ogranicza przesunięcia układu mierzone wskaźnikiem CLS. Atrybuty alt poprawiają dostępność i pomagają wyszukiwarkom, ale nie przyspieszają sklepu; elementy czysto dekoracyjne mogą mieć pusty alt.
CSS i JavaScript
Zakres prac obejmuje warunkowe ładowanie skryptów i arkuszy tylko tam, gdzie są potrzebne, usuwanie nieużywanego CSS, minifikację, ograniczanie zasobów blokujących renderowanie, defer lub async tam, gdzie pozwalają na to zależności, oraz porządek w zewnętrznych narzędziach analitycznych i marketingowych. W WooCommerce trzeba przy tym zachować kolejność skryptów obsługujących koszyk, warianty produktów i zamówienie.
Lokalne fonty
Fonty z zewnętrznych źródeł dodają połączenia sieciowe i mogą opóźniać renderowanie tekstu. Pomaga lokalne przechowywanie plików w formacie WOFF2, mniejsza liczba odmian i grubości, odpowiednia wartość font-display oraz preload najważniejszych fontów, jeśli daje wymierną korzyść:
@font-face {
font-family: "Shop Sans";
src: url("/fonts/shop-sans.woff2") format("woff2");
font-display: swap;
}Baza danych
Szczególnej uwagi wymaga tabela wp_options, zwłaszcza wpisy ładowane automatycznie. Warto sprawdzić rozmiar i strukturę danych autoload, nieaktualne rekordy i osierocone metadane, wygasłe transients, wydajność zapytań SQL, indeksy tabel oraz obciążenie generowane przez Action Scheduler.
Narzędzia takie jak WP-Optimize pomagają, ale automatyczne czyszczenie nie zastępuje analizy struktury danych. W bardziej rozbudowanych sklepach źródła problemów pozwala znaleźć WP-CLI, własne skrypty PHP i SQL oraz analiza zapytań.
Kompresja i nagłówki
Kompresja GZIP lub Brotli, dobrana do infrastruktury i rodzajów zasobów, zmniejsza ilość przesyłanych danych. Przy okazji warto sprawdzić nagłówki odpowiedzi i politykę buforowania zasobów statycznych.
Pomiar i monitoring
Optymalizacja zaczyna się od pomiaru i kończy weryfikacją. Przydatne są PageSpeed Insights i Lighthouse, wskaźniki LCP, INP, CLS i TTFB oraz Query Monitor i profilowanie PHP. Wyniki testów syntetycznych warto, jeśli to możliwe, zestawić z danymi rzeczywistych użytkowników.
Po wdrożeniu liczy się stały monitoring: logi błędów PHP i WordPress, logi serwera HTTP, wolne zapytania SQL, błędy WooCommerce i Action Scheduler, problemy z zewnętrznymi API, obciążenie PHP-FPM i zużycie pamięci oraz błędy przy składaniu zamówień i płatnościach. Logi muszą być zabezpieczone i niedostępne publicznie.
Ograniczenia
- Nie ma jednej konfiguracji dla każdego sklepu. Mały sklep z niewielkim ruchem potrzebuje innego podejścia niż platforma z tysiącami produktów, cennikami B2B, integracją z ERP i intensywnym ruchem.
- Każda zmiana w cache wymaga sprawdzenia koszyka, konta klienta i zamówienia, bo właśnie tam błędy są najdroższe.
- Czyszczenie bazy danych należy poprzedzić kopią zapasową i sprawdzeniem zależności, żeby nie naruszyć danych zamówień ani procesów biznesowych.
- Dobry wynik w PageSpeed nie jest celem samym w sobie. Testy syntetyczne nie pokazują wszystkich problemów, które widać w logach.
Wydajny WooCommerce to efekt znalezienia rzeczywistych wąskich gardeł i usunięcia ich na właściwym poziomie architektury, a nie jednej wtyczki czy jednego ustawienia.