Wolny WooCommerce - jak przyspieszyć sklep?
Sklep zwalnia inaczej niż zwykła strona. Połowa ruchu ma koszyk albo sesję, a te widoki nie korzystają z pamięci podręcznej strony, więc każde wejście generuje się od nowa. Dlatego przy WooCommerce nie wystarczy włączyć cache i skompresować zdjęcia. Wąskim gardłem jest zwykle baza danych i to, ile pracy wykonuje serwer przy każdym wyświetleniu listy produktów.
Dlaczego sklep jest trudniejszy niż zwykła strona?
| Element | Strona firmowa | Sklep WooCommerce |
|---|---|---|
| Cache strony | działa niemal wszędzie | omija koszyk, kasę i panel klienta |
| Liczba wpisów w bazie | setki | dziesiątki tysięcy z wariantami |
| Zapytania na jedno wyświetlenie | kilkanaście | często kilkaset |
| Sesje użytkowników | brak | każdy klient z koszykiem ma własną |
| Zadania w tle | pojedyncze | synchronizacje, e-maile, kursy walut |
Konsekwencja jest praktyczna: w sklepie liczy się wydajność serwera i bazy, a nie tylko waga strony. Optymalizacja skopiowana z poradnika dla witryny firmowej daje tam połowiczne efekty.
Baza danych: najczęstsze wąskie gardło
WooCommerce trzyma dane produktów, zamówień i sesji w kilku tabelach, które rosną szybciej, niż ktokolwiek zauważa.
Największym problemem bywa tabela z danymi tymczasowymi. Wtyczki zapisują tam wyniki, które miały wygasnąć, a nie wygasają. Przy sklepie działającym od dwóch lat potrafi ważyć więcej niż wszystkie produkty razem wzięte.
Druga sprawa to sesje klientów i porzucone koszyki. Trzecia to logi wtyczek, które zapisują każde zdarzenie i nigdy nie sprzątają.
Przy diagnozie wolnego sklepu zaczynamy od rozmiaru tabel, nie od PageSpeed. Kilka razy okazywało się, że cała optymalizacja polegała na usunięciu logów wtyczki, o której klient dawno zapomniał.
Krzysztof Czapnik, KC Mobile
Cache w sklepie: co można, a czego nie
Cache strony obejmuje to, co dla wszystkich wygląda tak samo: stronę główną, listy kategorii, karty produktów, wpisy na blogu. To zwykle większość ruchu z wyszukiwarki.
Poza pamięcią podręczną zostają koszyk, kasa, panel klienta, wyniki wyszukiwania i strona podziękowania za zamówienie. Te muszą być świeże i tam decyduje wydajność serwera.
Rozwiązaniem dla tej drugiej grupy jest cache obiektów, czyli zapisywanie wyników zapytań do bazy. Wymaga wsparcia serwera, najczęściej Redisa. Według ofert popularnych hostingów pakiety za 20-30 zł miesięcznie zwykle go nie mają, więc przy sklepie z ruchem to argument za mocniejszym pakietem.
Konfigurację warstw opisujemy w poradniku cache w WordPress. W sklepie najważniejsze są wykluczenia, bo błąd w nich oznacza, że klient widzi cudzy koszyk.
Listy produktów, filtry i wyszukiwarka
Lista kategorii z filtrowaniem to najcięższy widok w typowym sklepie. Każdy filtr generuje zapytanie po atrybutach, a te przy dużym katalogu bywają kosztowne.
Trzy rzeczy dają najwięcej:
- ograniczenie liczby produktów na stronie do rozsądnej wartości zamiast pokazywania całej kategorii naraz
- rezygnacja z liczników przy filtrach, które przy każdym wejściu przeliczają liczbę produktów w każdym wariancie
- zamiana domyślnej wyszukiwarki na rozwiązanie z własnym indeksem, jeśli klienci faktycznie z niej korzystają
Sprawdź też miniatury na listach. Jeśli kafelek o boku 200 pikseli pobiera pełnowymiarowe zdjęcie produktowe, dwadzieścia kafelków oznacza kilkanaście megabajtów na jedno wejście. Szerzej piszemy o tym w poradniku optymalizacja zdjęć.
Wtyczki i integracje w sklepie
Sklep ma zwykle dwa razy więcej wtyczek niż strona firmowa i każda integracja dokłada zapytania albo zadania w tle.
Największe koszty generują wtyczki odpytujące zewnętrzne usługi przy wyświetlaniu strony: kursy walut, stany magazynowe, terminy dostawy, rekomendacje. Jeśli zewnętrzny serwis odpowiada wolno, Twoja karta produktu czeka razem z nim.
Rozwiązaniem jest przeniesienie takich zapytań do zadań cyklicznych i zapisywanie wyniku, zamiast pytania na żywo przy każdym wyświetleniu.
Osobna kategoria to wtyczki dublujące funkcje, na przykład dwa systemy rabatów albo dwie integracje wysyłkowe. Rozkładamy to w poradniku za dużo wtyczek WordPress.
Zadania w tle, które spowalniają sklep
WooCommerce wykonuje wiele operacji w tle: wysyłkę e-maili, synchronizację stanów, przeliczanie raportów, czyszczenie sesji. Domyślnie uruchamia je ruch odwiedzających, co oznacza, że ktoś zawsze płaci za nie czekaniem.
Standardowe rozwiązanie to wyłączenie mechanizmu opartego na ruchu i zastąpienie go prawdziwym zadaniem cyklicznym po stronie serwera. Wtedy operacje wykonują się według harmonogramu, a nie przy losowym kliencie.
Sprawdź też kolejkę zadań. Przy sklepie z integracjami potrafi rosnąć szybciej, niż jest przetwarzana, a wtedy każde kolejne wejście dokłada pracy zamiast ją zdejmować. Narastająca kolejka jest jednym z częstszych powodów, dla których sklep zwalnia stopniowo przez kilka tygodni, bez żadnej pojedynczej zmiany, którą dałoby się wskazać jako przyczynę.
Przy dużych katalogach warto ograniczyć raporty i statystyki generowane na bieżąco. Przeliczanie sprzedaży za ostatnie dwa lata przy każdym otwarciu panelu to typowa przyczyna wolnej administracji.
Kasa i płatności: tam wolno kosztuje najwięcej
Opóźnienie na stronie głównej denerwuje, opóźnienie w kasie kosztuje. Klient jest tam najbliżej decyzji i jednocześnie najbardziej wyczulony na to, czy sklep działa sprawnie.
Kasa jest wykluczona z pamięci podręcznej, więc każde wejście to praca serwera. Dochodzą do tego zapytania do zewnętrznych usług: kalkulacja kosztów dostawy, sprawdzenie punktów odbioru, walidacja kodu rabatowego. Jeśli którakolwiek odpowiada wolno, klient czeka razem z nią.
Praktyczne minimum to trzy rzeczy: ustawienie krótkiego limitu oczekiwania na odpowiedzi zewnętrznych usług, zapisywanie ich wyników zamiast pytania przy każdym kroku oraz ograniczenie liczby pól formularza do tych, których naprawdę potrzebujesz.
Zmierz ścieżkę zakupu osobno, w oknie prywatnym, z produktem w koszyku. Wynik PageSpeed dla strony głównej nie mówi nic o tym, jak zachowuje się kasa.
Ile kosztuje optymalizacja sklepu?
Według naszego cennika podstawowa optymalizacja sklepu, obejmująca bazę, cache i obrazy, to 1500-3000 zł. Dane z większych wdrożeń, z audytem kodu i infrastruktury, pokazują 3000-8000 zł. Sklepy z rozbudowanymi integracjami wyceniamy indywidualnie.
Różnica względem strony firmowej wynika z zakresu: dochodzi analiza zapytań, zadań w tle i integracji, a każda zmiana musi zostać sprawdzona na całej ścieżce zakupu.
Bezpłatną wstępną analizę robimy w ciągu 24 godzin. Zwykle wystarcza, żeby powiedzieć, czy problemem jest baza, serwer, czy po prostu dwadzieścia wtyczek robiących to samo.
Kolejność, która działa przy sklepie
1. Zmierz czas odpowiedzi osobno dla strony głównej, karty produktu i koszyka
2. Sprawdź rozmiary tabel i wyczyść dane tymczasowe oraz logi wtyczek
3. Włącz cache strony z poprawnymi wykluczeniami i przetestuj zakup
4. Dołóż cache obiektów, jeśli serwer to obsługuje
5. Popraw miniatury na listach i zdjęcia na kartach produktów
6. Przenieś zapytania do zewnętrznych usług do zadań cyklicznych
7. Dopiero teraz rozważ mocniejszy serwer
Po każdym kroku przejdź pełną ścieżkę zakupu. W sklepie optymalizacja, która przyspieszyła stronę główną i zepsuła kasę, jest stratą, a nie zyskiem.
Robimy to jednorazowo albo w ramach stałej opieki nad stroną WordPress. Napisz przez formularz na stronie kontakt, a zaczniemy od bezpłatnej analizy.
Korzyści
- Zaczynamy od bazy i zapytań, bo w sklepie to one są wąskim gardłem, nie waga strony
- Cache z wykluczeniami dla koszyka i kasy, przetestowany na pełnej ścieżce zakupu
- Zapytania do zewnętrznych usług przenosimy do zadań cyklicznych
- Bezpłatna wstępna analiza w ciągu 24 godzin