WooCommerce je velká a složitá aplikace, jejíž nároky jsou vysoké a vlastně stále rostou. Už dávno vám pro úspěšné provozování nebude stačit běžný sdílený hosting, protože jen paměti RAM potřebuje Woo už 256 MB RAM jako minimum, viz Server Requirements. Jenže v praxi běží tyto weby stále na levných hostinzích a jsou pomalé a nevýkonné. Proto jsem sepsal pár bodů, které vám pomohou váš e-shop trochu rozhýbat. A první bod bude hosting.
Obsah
- Výkonný WooCommerce hosting
- Vhodné nastavení WooCommerce
- Úprava struktury databáze
- Vhodný filtrovací plugin pro frontend
- Dlouhé vložení do košíku
- E-shop jako celek je pomalý
Výkonný WooCommerce hosting
Když vyhledáte frázi „dobrý woocommerce hosting“, moc toho nenajdete. Pár článků, pár reklam na WordPress hosting, pak hosting pro WooCommerce za 100 Kč bez DPH měsíčně. To znamená, že není pro firmy – protože ty předpokládají, že cena je vždy s DPH, navíc za stovku měsíčně…
Hostingy berou WooCommerce viditelně stále jako běžný plugin, což není. Takže pokud potřebujete výkonný hosting pro Woo, máte dvě cesty:
- pořídit si vlastní server u běžného českého hostingu,
- nebo jít do zahraničí a najít si WooCommerce platformu
Pro Woo totiž není stěžejní, kolik dostanete místa na disku nebo že zálohy probíhají každý den (šmarjá, už nás někdo zbavte této protivné fráze, kterou se „chlubí“ každý hosting jak přes kopírák). Potřebujete toto:
- aspoň těch 256 MB RAM, spíše víc,
- SSD úložiště, které je snad už standardem,
- velkou databázi bez omezení velikosti,
- rychlou reakci serveru pro AJAXové dotazy (na pozadí),
- správně nastavené stránkové cachování (tedy cachovat produkty, ale ne košík),
- správně nastavenou databázovou cache jako Redis,
- možnost cache rychle a komfortně vyprázdnit,
- ochranu před útoky, takže třeba napojení na CloudFlare nebo podobný firewall,
- vstřícnou a kompetentní podporu, která vás nebude poučovat, ale bude mít pravomoce, dovednosti (bude znát Woo) a kapacitu jednat (nesmí to být technik nebo nedejbože majitel firmy, ale proškolený specialista uživatelské podpory).
Tohle jsou kritéria, která splňuje velmi málo hostingů v ČR. Ani ty zahraniční nejsou vždycky úplně perfektní, ale jsou dál. Jsme spokojení třeba s CloudWays.
Všímáte si, že neřeším peníze? To je totiž jen jedna položka, poněkud nevýznamná. Provoz shopu stojí peníze, které má vydělat. Nemůžete čekat, že to urvete na stovkovém hostingu. Tedy.. pokud to není sto dolarů. Pak jo.
Vhodné nastavení WooCommerce
Nebudu mluvit o tom, že máte na webu mít co nejméně pluginů, to je abeceda, kterou všichni známe. Někdy to ale prostě nejde minimalizovat, těch pluginů je potřeba víc. Ok, dokážu s tím žít, když e-shop maká a vydělává.
Pak je ale pár nastavení, která ovlivní výkon v administraci. Některá z nich nepotřebujete a jejich vypnutím získáte cenný čas.
Snížení počtu sloupců
V přehledu objednávek nebo produktů se zobrazuje velké množství informací a také určený počet řádků. Pokud snížíte počet položek (řádků) a skryjete i sloupce, které nejsou potřeba, dotazů do databáze bude méně, tudíž budou rychlejší. Je to jednoduchý zásah, ale mnoho laiků to neví.
Vypnutí analytiky e-shopu
Pokud nepoužíváte vnitřní analytiku e-shopu, tak ji vypněte.
Zrušte zatržení WooCommerce > Nastavení > Pokročilý > Vlastnosti > Analytiky. Zmizí sekce Analytiky v hlavní nabídce administrace.
Použijte úložiště HPOS
Od října 20223 je ve WooCommerce k dispozici efektivnější úložiště pro objednávky a další data, které e-shop ukládá a opakovaně načítá, což bylo vždy náročné na výkon a pomalé. Starší e-shopy mohou na HPOS přejít, nově instalované už ho používají.
Zkontrolujte si v sekci WooCommerce > Nastavení > Pokročilý > Vlastnosti > Order data storage, zda můžete přejít na HPOS, tedy
- převeďte staré objednávky do úložiště (klikněte na odkaz, proběhne to samo),
- vyřešte kompatibilitu pluginů – pokud některé plugin nepodporuje HPOS, požadujte po výrobci změnu
Rychlost načítání WooCommerce se tedy zvýší, pokud použijete úložiště HPOS, které pracuje lépe s databází a pokud vypnete zbytečné funkce jako analytiku (kterou používáte pomocí externí aplikace).
Úprava struktury databáze
Pomalé filtrování objednávek v administraci bývá otravný problém, který brzdí obsluhu a rychlé odbavování objednávek. Pokud už jste odstranili sloupce ve výpisu a nepomohlo to, je na čase říznout trochu hlouběji.
Příčinou ve skutečnosti není vykreslování, ale dolování dat z databáze. V tom by mělo pomoct úložiště HPOS, ale kromě něj taky zploštění struktury databáze a zjednodušení taxonomií. Jinými slovy omezte následující struktury, kde to jen půjde:
- rubriky, kategorie, štítky,
- vlastnosti produktu,
- varianty produktu,
- vlastní položky (metainformace) u produktu,
- taxonomie jiných pluginů (různé varianty rubrik a kategorií).
Všechna tahle data je drahé získat – SQL dotazy jsou složité, do více tabulek a pokaždé jsou jiné, tzn. špatně se cachují.
Vhodný filtrovací plugin pro frontend
Pomalé filtrování produktů na frontendu je druhá strana též mince. Filtry musí načíst velké množství informací, aby byly schopné rychle filtrovat a zobrazovat výsledky. Zapomeňte na srovnání s Alzou nebo velkými e-shopy. Pokud máte tisíce produktů, váš shop nebude schopen filtrovat produkty na kliknutí do dvou sekund. Bude to pomalejší a nejlepší je zobrazit tlačítko, kterým si uživatel filtr sám provede.
Dobré filtrovací pluginy používají svou metacache. Tedy načtou data do své vlastní cache (třeba soubor JSON), se kterou pracují – nelze se pořád ptát serveru a dotazy nelze efektivně cachovat. Velmi taky záleží na správném nastavení takového pluginu – doporučuji pečlivě číst dokumentaci, protože prvotní nastavení většinou nebude stačit.
Dlouhé vložení do košíku
Dlouho trvá, než se po kliknutí na nákupní tlačítko produkt vloží do košíku. To je velká bolest WooCommerce. Určitě už víte, kdo je na vině:
- pomalá databáze,
- chybějící cachovací plugin,
- špatná šablona
to samozřejmě nejsou. Musíme trochu uvažovat. Proč je reakce pomalá? Něco ji zřejmě musí brzdit…
Zatížený hosting
Největší brzdou je velké množství pluginů, které se spouštějí bez správného kontextu, spustí se tedy i během AJAX dotazu, který má produkt vložit do košíku. Byli byste překvapení, co všechno se spouští pří každém požadavků na běžný WordPress, neřkuli e-shop. Pluginy nemají žádné vymezené hřiště, kdy se smí nebo nesmí spustit. Mohou spouštět kdykoliv a cokoliv. Takže během požadavku na vložení do košíku se klidně mohou načítat úplně nesouvisející data, pokud je některý plugin tak blbě napsaný.
Zásadně s tím souvisí i rychlá odezva hostingu. Nejen samotný TTFB (prvotní reakce), ale také to, co všechno nutí aplikace hosting udělat, než odpoví.
Mnoho javascriptu pro nic
Podobně špatný dopad na výkon má velké množství nebo nesprávně nastavený kontext javascriptových listenerů (obsluha události click), který by se mohly spouštět jinak, jindy, ale jsou tady. Třeba posílání eventu do analytiky.
Nechci paušálně tvrdit, že je to vše špatně. Ale našel jsem v těchto místech opakovaně některý skript, který dokázal vložení výrazně brzdit. Toto je místo pro optimalizaci.
Na obrázku je druhá fáze přidání, kdy už se načítá košík. Předtím ještě proběhlo zpracování a přesměrování, které se hůře odchytává a ted ho tady nepotřebuji ukazovat. Už tak jsou tyto dva požadavky dlouhé. celá stránka se načetla po ~ 5 sekundách. To je bohužel běžné, ale je to pomalé! (Testováno na desktopu.)
E-shop jako celek je pomalý
Na celkovou kondici mají vliv a dopad všechny ty obecně známé věci jako špatná šablona, moc pluginů nebo velké obrázky. Ano, ale pomocí CDN nezrychlíte průchod objednávkou nebo práci s košíkem.
Pro funkčnost e-shopu mají zásadní význam dva asynchronní procesy, které běží na pozadí a většinu shopů bohužel brzdí:
- admin-ajax.php, který mmj. obsluhuje košík, ale slouží také jiným pluginům, takže jde o sdílené slabé místo(bottleneck) každého WordPressu/WooCommerce,
- fragmentová cache, která vykresluje ceny, košík a další prvky na obrazovce, které se neustále dynamicky mění a nesmí se cachovat (čili tato cache vlastně není klasická cache).
Pokud chcete správně cachovat e-shop, pak si musíte zajistit, že právě tato místa se nikdy cachovat nebudou. To třeba zmiňovaný hosting CloudWays umí a plně podporuje, je o pravidla do celostránkové cache Varnish.
Takže abyste zrychlili e-shop celkově, včetně přidávání do košíku, zajistěte, aby reakce na AJAX dotazy dorazily ASAP. Dejte si adresního řádku adresu vašeho shopu s uvedeným argumentem, např.
https://woocommerce-shop-643.com/?wc-ajax=get_refreshed_fragments
Na kartě Síť v DevTools se podívejte, jak dlouho provedení trvá. Cokoliv nad jednu sekundu je moc, ideální a realistické je do 300ms. Podobně to platí pro skript admin-ajax.php, ten ale nelze volat bez payload (naplnění daty), takže je obtížnější zjistit, co vše provádí a je potřeba profilovat kód s pomocí vhodných nástrojů.
Tady začíná optimalizace rychlosti vašeho WooCommerce.