W sieci znajdziesz tysiące poradników o tym jak przyspieszyć WooCommerce. Problem polega na tym, że większość z nich jest z założenia zła.
W sumie jest to przerażające, że wiele z nich powiela złe praktyki, a 95% dostawców hostingu przekłamuje to jeszcze po swojemu.
Pamiętaj, że takie procesy jak:
- Przeglądanie zamówień i aktualizacja ich statusu
- Edycja produktów
- Generowanie strony koszyka
- Generowanie strony zamówienia
- Składanie zamówienia
- Wyszukiwanie produktów
- Filtrowanie produktów
Są dynamiczne i nie da się ich oszukać przy użyciu wtyczek do cache (WP Rocket, Litespeed Cache, czy o zgrozo NitroPack).
Jeśli zatem chcesz, aby Twój WooCommerce był szybki jak rakieta, to zapraszam na przyspieszony kurs z optymalizacji WooCommerce! 😉
Do szybkiego WooCommerce będziemy tylko potrzebowali 3 składników:
- Dobrego serwera, czyli maszyny z odpowiednim zapasem mocy
- Odpowiedniej konfiguracji maszyny
- Zoptymalizowanego motywu i wtyczek
Proste?
Jak zwykle diabeł tkwi w szczegółach, dlatego postaram się rozwinąć i wyjaśnić poniżej dlaczego te elementy są istotne i w jaki sposób wpływają na szybkość sklepu.
Spis treści
Rozwiń spis treści
Serwer - nasz fundament
Jak działa WordPress, a zatem nasz sklep na WooCommerce?
W katalogu na serwerze mamy dość spory katalog z kodem w php WordPress, jego motywu i wtyczek.
Nasz serwer po zapytaniu z przeglądarki użytkownika
- Czyta te pliki
- Uzupełnia odpowiednimi danymi pobranymi z bazy danych MySQL
- Na końcu zwraca nam stronę w postaci kodu html, który rozumie nasza przeglądarka
- Strona wyświetla się w naszej przeglądarce
Schemat działania PHP w WordPress
Im szybszy i nowszy procesor, tym szybciej ten proces przebiega.
Im więcej dostępnego RAMu ma nasz serwer, tym lepiej możemy takie zapytania przetwarzać.
Im szybsze dyski ma nasz serwer, tym szybciej wczytamy wszystkie pliki.
Im mniej użytkowników korzysta z tych samych zasobów serwera, tym szybciej wygenerujemy stronę.
Wszystkie te operacje opierają się na sprzęcie. Sprzęt kosztuje. I jego praca również.
Dlatego często hostingi pracują na starszym sprzęcie, a jego wykorzystanie starają się rozkładać na maksymalnie dużą liczbę klientów. Tak, aby zmaksymalizować zysk na maszynach. Na palcach jednej ręki wyliczyć można hostingi, które rzeczywiście nie oszczędzają na zasobach swoich klientów, ale kosztują też odpowiednio więcej niż duża część rynkowej oferty pod WooCommerce.
Dobry sprzęt kosztuje. Zastanów się również czy serwer, na którym stoi Twój sklep powinien mieć mniej RAMu czy słabszy procesor od telefonu, na którym być może czytasz ten tekst.
Moim zdaniem, tu nie ma miejsca na kompromis. Dobry serwer kosztuje.
I z tym faktem po prostu musisz się pogodzić, jeśli zależy Ci na naprawdę dobrych i stabilnych wynikach.
W przypadku serwerów dedykowanych - masz pewność za jaki sprzęt płacisz. Masz też najlepszy stosunek ceny do jakości.
Konfiguracja serwera
geek alert!
Nawet jeśli Twoja maszyna ma już odpowiedni zapas mocy, to jeszcze trzeba ją odpowiednio wysterować. Bardziej techniczne tematy na temat różnic między technologią i o tym jak firmy hostingowe pompują popularność Litespeeda postaram się opisać szerzej w osobnym dedykowanym wpisie.
Co powinieneś wiedzieć? Goły, nie zoptymalizowany pod WooCommerce serwer wcale nie będzie powalał wydajnością. Kluczowe jest, aby odpowiednio ustawić zapasy zasobów pod płynną pracę bazę danych czy odpowiednią obsługę PHP. Odpowiednie ustawienie OPcache potrafi przyspieszyć sklep o kilkadziesiąt procent.
Jak podchodzę do ustawień serwera przy WooCommerce?
Temat dokładnej konfiguracji jest złożony i może być inny dla każdego sklepu ze względu na jego kompozycję. Jednak skupię się na paru rzeczach, które są stosunkowo proste do wprowadzenia i kontroli, a potrafią przynieść sporą różnicę.
W swoich konfiguracjach stosuję NGINX jako web server.
Czy można ustawić Woo na Apache lub Litespeed? Można. W przypadku WooCommerce, to nigdy nie web server będzie wąskim gardłem.
Your webserver will not be your bottleneck.
Calvin Akan, Snicco & CommandUI
We help people with the REAL bottlenecks every single day. And it’s never the webserver. It’s always some random esoteric shitty code that dicks up your PHP or MySQL performance.
Patrick Gallagher, CEO GridPane
NGINX jest najpopularniejszym web serverem pod WooCommerce - dlatego z niego korzystam na co dzień.
PHP OPcache
Absolutnie kluczowe ustawienie, choć rzadko wspominane w poradnikach. Prawidłowo ustawiony OPCache sprawia, że zamiast za każdym razem czytać pliki PHP z naszego dysku - kod czytany jest w postaci skompilowanego kodu jako opcode.
Co najważniejsze - skompilowany kod czytamy bezpośrednio z pamięci RAM, a nie twardego dysku.
Różnica prędkości odczytu sprawia, że przy dobrze ustawionym OPcache w praktyce może to przynieść od kilkudziesięciu do nawet kilkuset procent przyspieszenia w czasie generowania stron, szczególnie w przypadku rozbudowanych sklepów z wieloma pluginami. Absolutny must have szybkiego sklepu, choć bardzo często PHP OPcache jest niedostępny na współdzielonych hostingach.
SWAP
Jeśli kończy się pamięć RAM, system zaczyna używać dysku twardego jako tzw. SWAP, co bardzo mocno obniża wydajność.
Należy stale monitorować zużycie pamięci i dbać o to, by SWAP pozostawał możliwie bliski zera, korygując przy tym limity pamięci dla procesów czy bazy danych. Stałe użycie SWAP-u przekraczające 10% dostępnego RAM-u może drastycznie spowolnić działanie sklepu.
PHP FPM
Z reguły zaczynam od ustawienia samego PHP FPM w trybie Static, tak aby sklep miał do dyspozycji stałą ilość procesów i nie musiał ich inicjować.
Jeśli do dyspozycji mam np. 5 rdzeni CPU, to zaczynam od ustawienia Max Children na wielokrotność 3 - czyli 15. Jeśli mamy dobrze napisany sklep, to po testach możemy podnieść tą wartość. Jeśli odwrotnie, to zmniejszamy. Więcej procesów wcale nie oznacza większej sprawności.
Dla środowiska stage możemy spokojnie ustawić niższe wartości lub nawet opcję Ondemand.
PHP INI
Po ustaleniu ilości procesów warto przemnożyć ilość maksymalną przez maksymalną pamięć, którą możemy przypisać do wykonania skryptu PHP. Ta wartość powinna stanowić maksymalnie ok. 50-60% ilości RAMU, który przewidzieliśmy dla tego sklepu. Większość sklepów powinna działać poprawnie z wartością 256MB. Dla bardziej obciążonych kodem wersji możemy dać limit nawet 512MB, ale warto przy tym zredukować wartości PHP FPM. Jeśli damy za niskie limity, to szybko zauważymy to w logach błędów oraz przy korzystaniu ze strony w postaci PHP Fatal error: Out of memory.
Redis Object Cache
Czy jest to game changer, jak reklamują go niektóre hostingi? Absolutnie nie! Przynajmniej jeśli chodzi o sam czas generowania strony. 95% sklepów WooCommerce nie zauważy różnicy w performance, a dokładamy dodatkową warstwę cache, która może powodować konflikty z pluginami. Sprawdź testem k6 różnicę i podejmij decyzję samodzielnie.
I najważniejsze:
Nawet najlepsza konfiguracja nie odczaruje nam braku mocy serwera.
Tak samo najmocniejszy serwer ze złą konfiguracją nie będzie wcale najszybszym rozwiązaniem.
Motyw i wtyczki
To jaki kod składa się na nasz sklep ma olbrzymi wpływ na jego wydajność.
Źle napisana wtyczka może dodać nam sekundę lub dwie na każdej podstronie.
Wdrażając konkretną funkcję - warto sprawdzić alternatywy i porównać ich wydajność.
Źle napisane pluginy będą nam też zjadać chociażby bufor OPCache, przez co aby go optymalnie używać - będziesz musiał poświęcić więcej RAMu.
Profilowanie kodu
Prostym narzędziem, którego możesz użyć do sprawdzenia czy dane wtyczki nie spowalniają nadmiernie Twojego sklepu jest np. wtyczka Code Profiler.
Polecam nie tylko profilowanie strony głównej, ale też podstron produktów czy np. stron kategorii. Jeśli na liście coś wyprzedzi WooCommerce - to jest na 99% do skreślenia. Podobnie jeśli, któryś z pluginów będzie miał powyżej 10% udziału w czasie wykonania - warto wziąć go pod lupę.
Query manager
To kolejne narzędzie bez, którego nie wyobrażam sobie pracy z WordPressem. Wtyczka jest bezpłatna i pobierze ją z repozytorium WordPress.
Jeśli piszesz własny kod, to koniecznie polecam dodanie własnego profilowania: zobacz jak profilować kod Query Monitor.
Szybko sprawdzisz czy dodatkowy narzut kodu jest uzasadniony lub dokonasz dalszej optymalizacji swoich funkcji.
Zdrowy rozsądek
Pamiętaj, że walka o milisekundy kosztem funkcji sklepu często nie ma sensu.
Jest wiele sklepów, które w rażący sposób zawalają wskaźniki Core Web Vitals, a przy tym mają obroty liczone w milionach.
Nie wszystko zawsze musi być idealne. Przepisanie całego motywu kosztem kilkudziesięciu tysięcy złotych będzie miało sens dla sklepu, który tysiące transakcji.
Dla sklepu z setką transakcji miesięcznie urwanie nawet 200ms z czasu ładowania może nie mieć żadnego uzasadnienia ekonomicznego i bliski zera wpływ na konwersję.
Podsumowanie
- Nie oszczędzaj na hostingu
- Upewnij się, że jest dobrze skonfigurowany
- Staraj się korzystać z kodu wysokiej jakości i nie używaj źle napisanych wtyczek
Jeśli potrzebujesz skrojonego na miarę hostingu pod WooCommerce - to powoli startuję publicznie z taką usługą - więcej szczegółów znajdziesz tutaj:
Masz pytania lub uwagi? Skomentuj poniżej 👇