Modul 6 · 6.4
Hitrost in predpomnjenje v spletni trgovini
Modul 6: Upravljanje in varnost · Čas branja: 10 minut
Učni cilj: Po tej lekciji boste znali predpomnjenje za spletno trgovino WooCommerce nastaviti tako, da je trgovina hitra in da osebne strani nikoli ne pridejo v predpomnilnik, to pa boste znali preveriti tudi v glavah HTTP.
Ključni pojmi: predpomnilnik strani, izjeme (košarica, blagajna, Moj račun), piškotki, ki obidejo predpomnilnik, glave no-cache, DONOTCACHEPAGE, predpomnilnik objektov, Redis, fragmenti košarice, geolociranje s predpomnilnikom strani, čiščenje načrtovanih dejanj
Dve vrsti strani
Osnove predpomnjenja (predpomnilnik strani, predpomnilnik brskalnika, predpomnilnik objektov, OPcache, CDN) so opisane v tečaju o WordPressu, lekcija 6.2. Tam je navedeno tudi najpomembnejše pravilo za spletne trgovine: osebne strani ne smejo v predpomnilnik strani. Ta lekcija to pravilo podrobneje razloži.
Spletna trgovina ima dve vrsti strani:
| Vrsta | Primeri | Predpomnilnik |
|---|---|---|
| Enake za vse | domača stran, stran trgovine, kategorije, strani izdelkov, informativne strani | Predpomnilnik strani: da, tukaj je največji prihranek |
| Za vsakega obiskovalca drugačne | košarica, blagajna, Moj račun, stran za odstop od pogodbe s prijavljeno stranko | Predpomnilnik strani: nikoli |
Če gre kaj narobe, to takoj opazite: stranka vidi košarico nekoga drugega ali, še huje, naslov druge osebe na strani blagajne. To je tudi kršitev varnosti osebnih podatkov v smislu GDPR (KB 6749).
Kaj WooCommerce naredi sam
WooCommerce predpomnilniku pomaga na tri načine. Dobro jih je poznati, da opazite, kdaj jih kaj odstrani:
- Konstante. Na straneh košarice, blagajne in Moj račun WooCommerce nastavi
DONOTCACHEPAGE(in podobne konstante za predpomnilnik objektov in podatkovne baze). Številni vtičniki za predpomnjenje to konstanto preberejo in stran nato preskočijo. - Glave HTTP. Na istih straneh WooCommerce pošlje glave no-cache iz WordPressa:
Cache-Control: no-cache, must-revalidate, max-age=0, privateinExpiresz datumom v preteklosti. Posredniški strežnik ali CDN, ki upošteva pravila, strani potem ne shrani. Za prijavljene uporabnike se doda šeno-store. - Piškotki. Ko nekdo doda izdelek v košarico, WooCommerce nastavi piškotke, kot so
woocommerce_items_in_cart,woocommerce_cart_hashinwp_woocommerce_session_.... Dobri predpomnilniki obiskovalcem s takim piškotkom ne prikazujejo več shranjenih strani, tudi ne strani izdelkov, ker je na primer košarica v glavi strani takrat za vsakega obiskovalca drugačna.
Dokumentacija WooCommerce za vtičnike za predpomnjenje navaja: izključite košarico, Moj račun in blagajno ter piškotke woocommerce_cart_hash, woocommerce_items_in_cart, wp_woocommerce_session_, woocommerce_recently_viewed in store_notice[...]. Za Varnish navaja tudi pravila za naslove z ?add-to-cart=.
Kje se v praksi zalomi
- Drugi naslovi za strani trgovine. Košarico ste preimenovali v
/mandje/ali pa vtičnik za prevajanje ustvari/de/warenkorb/. Predpomnilnik, ki izključuje stalne naslove, kot je/cart, teh ne zajame. Vtičniki za predpomnjenje, ki poznajo WooCommerce, strani preberejo iz nastavitev; predpomnilnik na strežniku ali pri CDN-ju tega ne naredi. - CDN, ki predpomni vse. Nekatera pravila CDN (»cache everything«) prezrejo glave HTTP. V tem primeru strani trgovine in navedene piškotke izrecno izključite.
- Vtičnik, ki prepiše glave HTTP. Varnostni vtičnik ali vtičnik za pohitritev včasih na vsako stran postavi
Cache-Control: public, max-age=.... Takrat glav no-cache ni več. - Seja za vsakega obiskovalca. Običajno WooCommerce nastavi piškotek seje šele, ko je v košarici izdelek. Če vtičnik ali tema že vsakemu obiskovalcu ustvari sejo (piškotek
wp_woocommerce_session_aliPHPSESSIDob prvem obisku), predpomnilnik strani odpove za vse in Vaša trgovina je ob velikem obisku počasna. - Geolociranje. V WooCommerce > Nastavitve > Splošno izberete privzeto lokacijo stranke. Pri navadnem »Geolociranje« strežnik državo izračuna za vsakega obiskovalca posebej, kar se pri cenah po državah ne ujema s predpomnilnikom strani. Zato ima WooCommerce možnost »Geolociranje (s podporo za predpomnjenje strani)«, ki državo določi z dodatno zahtevo v brskalniku. Če cen ali DDV po državah pred zaključkom nakupa ne potrebujete, izberite državo trgovine: to je najpreprosteje. Za geolociranje WooCommerce redno prenaša podatkovno bazo podjetja MaxMind.
Na strežniku LiteSpeed (kot pri WebOké) izjeme za WooCommerce samodejno ureja vtičnik LiteSpeed Cache; preverite jih v nastavitvah za izključitve. Pri drugih spletnih strežnikih in ponudnikih gostovanja deluje podobno z drugim vtičnikom za predpomnjenje.
Česa predpomnilnik strani ne reši
Košarico in blagajno vedno sestavita PHP in podatkovna baza. Ob velikem obisku (akcija, e-novice) so to ravno strani, na katerih Vaše stranke zapravljajo denar. Tam pomagajo druge stvari:
- Predpomnilnik objektov, kot je Redis, shranjuje rezultate poizvedb v podatkovno bazo v pomnilniku. Pri spletni trgovini, ki ima veliko strani, ki ne smejo v predpomnilnik strani, to prinese opazno več kot pri navadnem spletnem mestu. Vaše gostovanje mora ponujati Redis (pri WebOké je to mogoče, DA 15.7); nato ga vklopite z vtičnikom.
- Fragmenti košarice. Klasične teme košarico v glavi strani posodabljajo s skriptom (
wc-cart-fragments), ki pri polni košarici pošlje dodatno zahtevo. Sodobne blokovne teme z blokom mini košarice tega potrebujejo manj. Takih skriptov ne nalagajte na strani, kjer nimajo nobene vloge. - Očiščena načrtovana dejanja. WooCommerce za opravila v ozadju uporablja Action Scheduler (lekcija 7.3). Zaključena dejanja se privzeto počistijo po enem mesecu. Če seznam kljub temu naraste na več sto tisoč vnosov, pogosto zaradi razširitve, ki nenehno nekaj načrtuje, ali zaradi neuspelih dejanj, postanejo poizvedbe v podatkovno bazo počasnejše. V WooCommerce > Stanje > Načrtovana dejanja preverite število neuspelih dejanj in dejanj v čakanju.
- HPOS. Naročila v lastnih tabelah (lekcija 1.2) omogočajo hitrejše iskanje po naročilih kot v stari tabeli prispevkov. Obstoječe trgovine morajo preklopiti same (lekcija 6.2 o varnostnih kopijah pred tem).
- Aktualna različica PHP in dovolj pomnilnika (lekcija 7.2).
V praksi: tako je videti v WooCommerce
Pri Theehuis Example to preverite v zasebnem oknu z orodji za razvijalce v brskalniku (F12, zavihek Omrežje, prva zahteva):
- Domačo stran naložite dvakrat: ob drugem nalaganju se pokaže glava, kot je
x-litespeed-cache: hitalicf-cache-status: HIT. Ob prvem obisku ni piškotkawp_woocommerce_session_. shop.example.com/winkelwagen/naložite dvakrat: ni zadetka,cache-controlpa vsebujeno-cachealiprivate.- Enako naredite za blagajno in Moj račun.
- Dodajte izdelek v košarico in naložite stran izdelka: videti morate svojo košarico, ne shranjene različice.
Povzetek
- Strani, ki so enake za vse, gredo v predpomnilnik; košarica, blagajna in Moj račun nikoli.
- WooCommerce sam nastavi DONOTCACHEPAGE, glave no-cache in piškotke; preverite, da jih nič ne odstrani ali prezre.
- Bodite pozorni na preimenovane naslove, pravila CDN, vtičnike, ki prepisujejo glave HTTP, seje za vsakega obiskovalca in geolociranje.
- Redis, očiščena načrtovana dejanja, HPOS in dobra različica PHP pomagajo tam, kjer predpomnilnik strani ne more.
- Preizkusite z dvakratnim nalaganjem v zasebnem oknu in preberite glave HTTP.
Kviz
Naloga
Naloga A6.4: Ali košarica in blagajna ostaneta zunaj predpomnilnika? Vnesite naslov svoje trgovine ter naslova strani košarice in blagajne (po želji tudi Moj račun). Program dvakrat zahteva domačo stran z 2 sekundama razmika, brez piškotkov, nato pa tudi vsako stran trgovine dvakrat. V košarico se ne doda nič in nič se ne naroči. Zeleno, če domača stran ob drugi zahtevi pride iz predpomnilnika (ali je opazno hitrejša) in ne nastavi piškotka seje ter če vsaka stran trgovine ob drugi zahtevi nima zadetka v predpomnilniku in pošlje Cache-Control z no-cache, no-store, private ali max-age=0. Oranžno, če domača stran ne uporablja predpomnilnika ali če stran trgovine nima zadetka, a tudi nima glave no-cache. Rdeče pri zadetku v predpomnilniku na košarici, blagajni ali Moj račun ali če domača stran pri vsakem obiskovalcu začne sejo WooCommerce.
Zelena kljukica pomeni, da je ta kontrola trenutno v redu, ne pa, da je Vaša trgovina varna.
Za nadaljnje branje
Koraki v nadzorni plošči veljajo za WebOké; pri drugih ponudnikih deluje podobno.
- Brezplačni tečaj WordPress 6.2: Predpomnjenje (caching)
- Brezplačni tečaj WordPress 6.3: Slike, PHP in druge izboljšave hitrosti
- Priročnik DirectAdmin 15.7: Redis
- Moje spletno mesto je počasno ali porablja preveč procesorske moči: tako ga pohitrite
- Ali gre za varnostno kršitev podatkov in ali jo moram prijaviti?
- Configuring caching plugins (developer.woocommerce.com, angleško): https://developer.woocommerce.com/docs/best-practices/performance/configuring-caching-plugins/
