Modul 6 · 6.4
Rýchlosť a cache v e-shope
Modul 6: Správa a bezpečnosť · Čas čítania: 10 min.
Cieľ lekcie: Po tejto lekcii dokážete nastaviť cache pre e-shop WooCommerce tak, aby bol obchod rýchly a osobné stránky sa nikdy nedostali do cache, a dokážete to overiť podľa hlavičiek HTTP.
Kľúčové pojmy: medzipamäť stránok (page cache), výnimky (košík, pokladňa, Môj účet), cookies, ktoré obchádzajú cache, hlavičky no-cache, DONOTCACHEPAGE, objektová cache, Redis, fragmenty košíka, geolokácia s medzipamäťou stránok, čistenie plánovaných akcií
Dva druhy stránok
Základy cache (medzipamäť stránok, cache prehliadača, objektová cache, OPcache, CDN) nájdete v kurze o WordPresse, v lekcii 6.2. Tam je uvedené aj najdôležitejšie pravidlo pre e-shopy: osobné stránky nesmú byť v medzipamäti stránok. Táto lekcia ho rozvádza podrobnejšie.
E-shop má dva druhy stránok:
| Druh | Príklady | Cache |
|---|---|---|
| Rovnaké pre všetkých | domovská stránka, stránka obchodu, kategórie, stránky produktov, informačné stránky | Medzipamäť stránok: áno, tu je najväčší prínos |
| Pre každého návštevníka iné | košík, pokladňa, Môj účet, stránka na odstúpenie od zmluvy s prihláseným zákazníkom | Medzipamäť stránok: nikdy |
Ak sa niečo pokazí, prejaví sa to okamžite: zákazník uvidí košík niekoho iného, alebo ešte horšie, cudziu adresu na stránke pokladne. To je zároveň porušenie ochrany osobných údajov v zmysle GDPR (KB 6749).
Čo robí WooCommerce samo
WooCommerce pomáha cache tromi spôsobmi. Oplatí sa ich poznať, aby ste si všimli, keď ich niečo odstráni:
- Konštanty. Na stránkach košíka, pokladne a Môj účet nastaví WooCommerce konštantu
DONOTCACHEPAGE(a podobné aj pre objektovú a databázovú cache). Mnohé pluginy na cache túto konštantu čítajú a takú stránku vynechajú. - Hlavičky. Na tých istých stránkach posiela WooCommerce hlavičky no-cache z WordPressu:
Cache-Control: no-cache, must-revalidate, max-age=0, privatea hlavičkuExpiress dátumom v minulosti. Proxy alebo CDN, ktoré dodržiavajú pravidlá, potom stránku neuložia. Pre prihlásených používateľov pribudneno-store. - Cookies. Hneď ako niekto vloží niečo do košíka, WooCommerce nastaví cookies ako
woocommerce_items_in_cart,woocommerce_cart_hashawp_woocommerce_session_.... Dobré cache už návštevníkom s takou cookie nedávajú uloženú stránku, ani pri stránkach produktov, pretože napríklad košík v hlavičke stránky je potom pre každého návštevníka iný.
Dokumentácia WooCommerce pre pluginy na cache odporúča: vylúčte košík, Môj účet a pokladňu a cookies woocommerce_cart_hash, woocommerce_items_in_cart, wp_woocommerce_session_, woocommerce_recently_viewed a store_notice[...]. Pre Varnish uvádza aj pravidlá pre adresy s ?add-to-cart=.
Kde to v praxi zlyháva
- Iné adresy stránok obchodu. Košík ste premenovali na
/moj-kosik/alebo prekladový plugin vytvorí/de/warenkorb/. Cache, ktorá vylučuje pevné adresy ako/cart, ich prehliadne. Pluginy na cache, ktoré poznajú WooCommerce, načítajú stránky z nastavení; cache na serveri alebo v CDN to nerobí. - CDN, ktoré ukladá všetko. Niektoré pravidlá CDN („cache everything“) ignorujú hlavičky. Vtedy stránky obchodu a uvedené cookies výslovne vylúčte.
- Plugin, ktorý prepisuje hlavičky. Bezpečnostný alebo výkonnostný plugin niekedy nastaví na každej stránke
Cache-Control: public, max-age=.... Hlavičky no-cache potom zmiznú. - Relácia pre každého návštevníka. Bežne WooCommerce nastaví cookie relácie až vtedy, keď je v košíku nejaký tovar. Ak plugin alebo téma založí reláciu už každému návštevníkovi (cookie
wp_woocommerce_session_aleboPHPSESSIDpri prvej návšteve), medzipamäť stránok prestane fungovať pre všetkých a váš e-shop bude pri vyššej návštevnosti pomalý. - Geolokácia. V WooCommerce > Nastavenia > Všeobecné vyberáte predvolenú polohu zákazníka. Pri obyčajnej možnosti „Geolokácia“ server zisťuje krajinu pre každého návštevníka a pri cenách podľa krajiny sa to s medzipamäťou stránok nezlučuje. WooCommerce preto ponúka možnosť „Geolokácia (s podporou medzipamäte stránok)“, ktorá krajinu zisťuje dodatočnou požiadavkou v prehliadači. Ak pred pokladňou nepotrebujete ceny ani DPH podľa krajiny, zvoľte krajinu obchodu: je to najjednoduchšie. Na geolokáciu WooCommerce pravidelne sťahuje databázu od spoločnosti MaxMind.
Na serveri LiteSpeed (ako vo WebOké) rieši výnimky pre WooCommerce sám plugin LiteSpeed Cache; skontrolujte ich v nastaveniach výnimiek. Pri iných webových serveroch a poskytovateľoch hostingu to s iným pluginom na cache funguje podobne.
Čo medzipamäť stránok nevyrieši
Košík a pokladňu vždy zostavuje PHP a databáza. Pri vyššej návštevnosti (akcia, newsletter) sú to práve stránky, na ktorých vaši zákazníci míňajú peniaze. Tam pomáhajú iné veci:
- Objektová cache, napríklad Redis, ukladá výsledky databázových dopytov do pamäte. V e-shope, ktorý má veľa stránok, čo nemôžu byť v medzipamäti stránok, to prinesie citeľne viac než na bežnej stránke. Váš hosting musí Redis ponúkať (vo WebOké je to možné, DA 15.7); potom ho zapnete pomocou pluginu.
- Fragmenty košíka. Klasické témy aktualizujú košík v hlavičke stránky skriptom (
wc-cart-fragments), ktorý pri naplnenom košíku posiela dodatočnú požiadavku. Moderné blokové témy s blokom mini košíka to potrebujú menej. Nenačítavajte takéto skripty na stránkach, kde nemajú čo robiť. - Vyčistené plánované akcie. WooCommerce používa Action Scheduler na úlohy na pozadí (lekcia 7.3). Dokončené akcie sa predvolene vymažú po mesiaci. Ak zoznam aj tak narastie na státisíce, často kvôli rozšíreniu, ktoré stále niečo plánuje, alebo kvôli neúspešným akciám, databázové dopyty sa spomalia. V WooCommerce > Stav > Plánované akcie sledujte počet neúspešných a čakajúcich akcií.
- HPOS. Objednávky vo vlastných tabuľkách (lekcia 1.2) zrýchľujú vyhľadávanie v objednávkach oproti starej tabuľke príspevkov. Existujúce obchody musia prejsť samy (lekcia 6.2 o zálohách vopred).
- Aktuálna verzia PHP a dostatok pamäte (lekcia 7.2).
V praxi: takto to vyzerá vo WooCommerce
Skontrolujte to pri Theehuis Example v súkromnom okne s nástrojmi pre vývojárov vo vašom prehliadači (F12, karta Sieť, prvá požiadavka):
- Domovská stránka, načítať dvakrát: pri druhom načítaní hlavička ako
x-litespeed-cache: hitalebocf-cache-status: HIT. Žiadna cookiewp_woocommerce_session_pri prvej návšteve. shop.example.com/kosik/, načítať dvakrát: žiadny zásah (hit) acache-controlsno-cachealeboprivate.- To isté pre pokladňu a Môj účet.
- Vložte produkt do košíka a načítajte stránku produktu: uvidíte svoj vlastný košík, nie uloženú verziu.
Zhrnutie
- Stránky, ktoré sú rovnaké pre všetkých, patria do cache; košík, pokladňa a Môj účet nikdy.
- WooCommerce samo nastavuje DONOTCACHEPAGE, hlavičky no-cache a cookies; overte, že ich nič neodstraňuje ani neignoruje.
- Dávajte pozor na premenované adresy, pravidlá CDN, pluginy prepisujúce hlavičky, relácie pre každého návštevníka a geolokáciu.
- Redis, vyčistené plánované akcie, HPOS a vhodná verzia PHP pomáhajú tam, kde medzipamäť stránok nemôže.
- Testujte dvojitým načítaním v súkromnom okne a čítajte hlavičky.
Kvíz
Úloha
Úloha A6.4: Zostávajú košík a pokladňa mimo cache? Zadajte adresu svojho e-shopu a adresy stránky košíka a pokladne (prípadne aj Môj účet). Program načíta domovskú stránku dvakrát s odstupom 2 sekúnd, bez cookies, a potom každú stránku obchodu tiež dvakrát. Nič sa nevkladá do košíka a nič sa neobjednáva. Zelená, ak domovská stránka pri druhom načítaní pochádza z cache (alebo je zreteľne rýchlejšia) a nenastaví cookie relácie, a ak každá stránka obchodu pri druhom načítaní nemá zásah z cache a posiela Cache-Control s no-cache, no-store, private alebo max-age=0. Oranžová, ak domovská stránka nepoužíva cache, alebo ak stránka obchodu nemá zásah, ale ani hlavičku no-cache. Červená pri zásahu z cache na košíku, pokladni alebo Môj účet, alebo ak domovská stránka spúšťa reláciu WooCommerce každému návštevníkovi.
Zelená fajka znamená, že táto kontrola je teraz v poriadku, nie že je váš e-shop bezpečný.
Ďalšie čítanie
Postupy v paneli platia pre WebOké; u iných poskytovateľov to funguje podobne.
- Bezplatný kurz WordPress 6.2: Caching
- Bezplatný kurz WordPress 6.3: Obrázky, PHP a ďalšie zrýchlenie
- Návod na DirectAdmin 15.7: Redis
- Moja webová stránka je pomalá alebo využíva príliš veľa CPU: takto ju zrýchlite
- Je to únik údajov a mám ho nahlásiť?
- Configuring caching plugins (developer.woocommerce.com, v angličtine): https://developer.woocommerce.com/docs/best-practices/performance/configuring-caching-plugins/
- LiteSpeed Cache pre WordPress a internetový obchod
