Modul 6 · 6.4
Brzina i predmemorija u web-trgovini
Modul 6: Upravljanje i sigurnost · Vrijeme čitanja: 10 minuta
Cilj učenja: Nakon ove lekcije moći ćete postaviti predmemoriju za WooCommerce trgovinu tako da trgovina bude brza, a osobne stranice nikad ne završe u predmemoriji. To ćete moći i provjeriti u HTTP zaglavljima.
Ključni pojmovi: predmemorija stranice, iznimke (košarica, blagajna, Moj račun), kolačići koji zaobilaze predmemoriju, no-cache zaglavlja, DONOTCACHEPAGE, predmemorija objekata, Redis, fragmenti košarice, geolokacija s predmemorijom stranice, čišćenje zakazanih akcija
Dvije vrste stranica
Osnove predmemoriranja (predmemorija stranice, predmemorija preglednika, predmemorija objekata, OPcache, CDN) obrađene su u tečaju o WordPressu, lekcija 6.2. Ondje je navedeno i najvažnije pravilo za trgovine: osobne stranice ne smiju biti u predmemoriji stranice. Ova lekcija to detaljno razrađuje.
Trgovina ima dvije vrste stranica:
| Vrsta | Primjeri | Predmemorija |
|---|---|---|
| Iste za sve | početna stranica, stranica trgovine, kategorije, stranice proizvoda, informativne stranice | Predmemorija stranice: da, ovdje je najveći dobitak |
| Različite za svakog posjetitelja | košarica, blagajna, Moj račun, stranica za jednostrani raskid ugovora s prijavljenim kupcem | Predmemorija stranice: nikad |
Ako nešto pođe po zlu, to se odmah vidi: kupac vidi tuđu košaricu ili, još gore, nečiju adresu na stranici blagajne. To je ujedno i povreda osobnih podataka u smislu GDPR-a (KB 6749).
Što WooCommerce već sam radi
WooCommerce pomaže predmemoriji na tri načina. Dobro ih je poznavati kako biste primijetili kada ih nešto ukloni:
- Konstante. Na košarici, blagajni i stranici Moj račun WooCommerce postavlja
DONOTCACHEPAGE(te iste konstante za predmemoriju objekata i baze podataka). Mnogi dodaci za predmemoriju čitaju tu konstantu i tada preskaču stranicu. - Zaglavlja. Na tim istim stranicama WooCommerce šalje WordPressova no-cache zaglavlja:
Cache-Control: no-cache, must-revalidate, max-age=0, privateiExpiress datumom u prošlosti. Proxy ili CDN koji poštuje pravila tada ne sprema stranicu. Za prijavljene korisnike dodaje se ino-store. - Kolačići. Čim netko stavi nešto u košaricu, WooCommerce postavlja kolačiće kao što su
woocommerce_items_in_cart,woocommerce_cart_hashiwp_woocommerce_session_.... Dobre predmemorije posjetiteljima s takvim kolačićem više ne poslužuju spremljenu stranicu, ni za stranice proizvoda, jer je tada primjerice košarica u zaglavlju stranice različita za svakog posjetitelja.
Dokumentacija WooCommercea za dodatke za predmemoriju navodi: izuzmite košaricu, Moj račun i blagajnu te kolačiće woocommerce_cart_hash, woocommerce_items_in_cart, wp_woocommerce_session_, woocommerce_recently_viewed i store_notice[...]. Za Varnish daje i pravila za adrese s ?add-to-cart=.
Gdje u praksi nastaju problemi
- Druge adrese za stranice trgovine. Preimenovali ste košaricu u
/mandje/ili dodatak za prijevod stvara/de/warenkorb/. Predmemorija koja izuzima fiksne adrese poput/cartto neće prepoznati. Dodaci za predmemoriju koji poznaju WooCommerce čitaju stranice iz postavki; predmemorija na poslužitelju ili kod CDN-a to ne radi. - CDN koji sprema sve. Neka pravila CDN-a ("cache everything") zanemaruju zaglavlja. U tom slučaju izričito izuzmite stranice trgovine i navedene kolačiće.
- Dodatak koji prepisuje zaglavlja. Dodatak za sigurnost ili brzinu ponekad na svaku stranicu postavlja
Cache-Control: public, max-age=.... Tada no-cache zaglavlja više nisu prisutna. - Sesija za svakog posjetitelja. WooCommerce inače postavlja kolačić sesije tek kad je nešto u košarici. Ako dodatak ili tema već svakom posjetitelju otvara sesiju (kolačić
wp_woocommerce_session_iliPHPSESSIDpri prvom posjetu), predmemorija stranice prestaje raditi za sve i Vaša je trgovina spora kad je velik promet. - Geolokacija. U WooCommerce > Postavke > Općenito odabirete zadanu lokaciju kupca. Uz običnu opciju "Geolokacija" poslužitelj za svakog posjetitelja izračunava državu, a kod cijena po državama to se ne slaže s predmemorijom stranice. Zato WooCommerce nudi opciju "Geolokacija (s podrškom za predmemoriranje stranica)", koja državu određuje dodatnim zahtjevom u pregledniku. Ako prije plaćanja ne trebate cijene ili PDV po državama, odaberite državu trgovine: to je najjednostavnije. Za geolokaciju WooCommerce povremeno preuzima bazu podataka tvrtke MaxMind.
Na LiteSpeed poslužitelju (kao kod WebOkéa) dodatak LiteSpeed Cache sam uređuje iznimke za WooCommerce; provjerite ih u postavkama za izuzimanje. Kod drugih web-poslužitelja i pružatelja hostinga to s drugim dodatkom za predmemoriju funkcionira slično.
Što predmemorija stranice ne rješava
Košaricu i blagajnu uvijek izgrađuju PHP i baza podataka. Pri velikom prometu (akcija, newsletter) upravo su to stranice na kojima Vaši kupci troše novac. Ondje pomažu druge stvari:
- Predmemorija objekata kao što je Redis sprema rezultate upita prema bazi podataka u memoriju. Kod trgovine, s mnogo stranica koje ne mogu biti u predmemoriji stranice, to donosi osjetno više nego kod obične stranice. Vaš hosting mora nuditi Redis (kod WebOkéa je to moguće, DA 15.7); zatim ga uključite pomoću dodatka.
- Fragmenti košarice. Klasične teme ažuriraju košaricu u zaglavlju stranice skriptom (
wc-cart-fragments) koja kod pune košarice šalje dodatni zahtjev. Modernim blok-temama s blokom mini košarice to je manje potrebno. Ne učitavajte takve skripte na stranicama na kojima ništa ne rade. - Očišćene zakazane akcije. WooCommerce koristi Action Scheduler za pozadinske zadatke (lekcija 7.3). Dovršene akcije zadano se brišu nakon mjesec dana. Ako popis ipak naraste na stotine tisuća, često zbog proširenja koje stalno nešto zakazuje ili zbog neuspjelih akcija, upiti prema bazi podataka postaju sporiji. U WooCommerce > Status > Zakazane akcije pogledajte broj neuspjelih akcija i akcija na čekanju.
- HPOS. Narudžbe u vlastitim tablicama (lekcija 1.2) omogućuju brže pretraživanje narudžbi nego u staroj tablici objava. Postojeće trgovine moraju same prijeći na njih (lekcija 6.2 o sigurnosnim kopijama prije toga).
- Aktualna verzija PHP-a i dovoljno memorije (lekcija 7.2).
U praksi: ovako to izgleda u WooCommerceu
Provjerite to kod Theehuis Example u privatnom prozoru s alatima za razvojne programere u Vašem pregledniku (F12, kartica Mreža, prvi zahtjev):
- Početnu stranicu učitajte dvaput: pri drugom učitavanju vidite zaglavlje kao
x-litespeed-cache: hitilicf-cache-status: HIT. Nema kolačićawp_woocommerce_session_pri prvom posjetu. shop.example.com/winkelwagen/učitajte dvaput: nema pogotka, acache-controlsadržino-cacheiliprivate.- Isto za blagajnu i Moj račun.
- Stavite proizvod u košaricu i učitajte stranicu proizvoda: vidite vlastitu košaricu, a ne spremljenu verziju.
Sažetak
- Stranice koje su iste za sve idu u predmemoriju; košarica, blagajna i Moj račun nikad.
- WooCommerce sam postavlja DONOTCACHEPAGE, no-cache zaglavlja i kolačiće; provjerite da ih ništa ne uklanja ili zanemaruje.
- Pazite na preimenovane adrese, pravila CDN-a, dodatke koji prepisuju zaglavlja, sesije za svakog posjetitelja i geolokaciju.
- Redis, očišćene zakazane akcije, HPOS i dobra verzija PHP-a pomažu ondje gdje predmemorija stranice ne može.
- Testirajte dvostrukim učitavanjem u privatnom prozoru i pročitajte zaglavlja.
Kviz
Zadatak
Zadatak A6.4: Ostaju li košarica i blagajna izvan predmemorije? Unesite adresu svoje trgovine te adrese košarice i stranice blagajne (i po želji stranice Moj račun). Program dvaput zahtijeva početnu stranicu s razmakom od 2 sekunde, bez kolačića, a zatim i svaku stranicu trgovine dvaput. Ništa se ne stavlja u košaricu i ništa se ne naručuje. Zeleno ako početna stranica pri drugom zahtjevu dolazi iz predmemorije (ili je očito brža) bez postavljanja kolačića sesije, te ako svaka stranica trgovine pri drugom zahtjevu nema pogodak predmemorije i šalje Cache-Control s no-cache, no-store, private ili max-age=0. Narančasto ako početna stranica ne koristi predmemoriju ili ako stranica trgovine nema pogodak, ali nema ni no-cache zaglavlje. Crveno ako postoji pogodak predmemorije na košarici, blagajni ili stranici Moj račun, ili ako početna stranica svakom posjetitelju pokreće WooCommerce sesiju.
Zelena kvačica znači da je ova provjera trenutačno u redu, a ne da je Vaša trgovina sigurna.
Daljnje čitanje
Koraci u upravljačkoj ploči odnose se na WebOké; kod drugih pružatelja usluga postupak je sličan.
- Besplatan WordPress tečaj 6.2: Predmemoriranje (caching)
- Besplatan WordPress tečaj 6.3: Slike, PHP i druge dobitke u brzini
- DirectAdmin priručnik 15.7: Redis
- Moja web stranica je spora ili koristi previše CPU-a: ovako je možete ubrzati
- Je li ovo povreda osobnih podataka i moram li je prijaviti?
- Configuring caching plugins (developer.woocommerce.com, na engleskom): https://developer.woocommerce.com/docs/best-practices/performance/configuring-caching-plugins/
- LiteSpeed Cache za WordPress i internetsku trgovinu
