← News / wszystkie artykuły
Optymalizacja

Optymalizacja WooCommerce warstwa po warstwie: cache, Redis, baza danych i Core Web Vitals

· 5 min czytania

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:

PHP
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 srcset i sizes;
  • 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ść:

CSS
@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.

Wybierz, na które opcjonalne pliki cookies się zgadzasz. Zgodę możesz zmienić lub wycofać w każdej chwili w ustawieniach cookies w stopce strony. Polityka cookies