6 modulis · 6.4
E. parduotuvės greitis ir talpykla (cache)
6 modulis: Valdymas ir saugumas · Skaitymo laikas: 10 min.
Mokymosi tikslas: Po šios pamokos galėsite nustatyti WooCommerce e. parduotuvės talpyklą taip, kad parduotuvė veiktų greitai, o asmeniniai puslapiai niekada nepatektų į talpyklą, ir galėsite tai patikrinti pagal HTTP antraštes.
Pagrindinės sąvokos: puslapio talpykla, išimtys (krepšelis, atsiskaitymas, Mano paskyra), slapukai, kurie apeina talpyklą, no-cache antraštės, DONOTCACHEPAGE, objektų talpykla, Redis, krepšelio fragmentai, geolokacija su puslapio talpykla, suplanuotų veiksmų valymas
Dviejų rūšių puslapiai
Talpyklos pagrindai (puslapio talpykla, naršyklės talpykla, objektų talpykla, OPcache, CDN) aprašyti WordPress kurse, 6.2 pamokoje. Ten jau pateikta ir svarbiausia taisyklė e. parduotuvėms: asmeniniai puslapiai negali patekti į puslapio talpyklą. Šioje pamokoje ji išplėtojama.
E. parduotuvėje yra dviejų rūšių puslapiai:
| Rūšis | Pavyzdžiai | Talpykla |
|---|---|---|
| Visiems vienodi | pagrindinis puslapis, parduotuvės puslapis, kategorijos, prekių puslapiai, informaciniai puslapiai | Puslapio talpykla: taip, čia didžiausia nauda |
| Kiekvienam lankytojui skirtingi | krepšelis, atsiskaitymas, Mano paskyra, sutarties atsisakymo puslapis prisijungusiam klientui | Puslapio talpykla: niekada |
Jei kas nors nepavyksta, tai matyti iš karto: klientas mato kito žmogaus krepšelį arba, dar blogiau, kito asmens adresą atsiskaitymo puslapyje. Tai taip pat yra asmens duomenų saugumo pažeidimas pagal BDAR (KB 6749).
Ką WooCommerce jau daro pati
WooCommerce padeda talpyklai trimis būdais. Juos verta žinoti, kad pastebėtumėte, kai kas nors juos panaikina:
- Konstantos. Krepšelio, atsiskaitymo ir Mano paskyros puslapiuose WooCommerce nustato
DONOTCACHEPAGE(taip pat ir objektų bei duomenų bazės talpyklai). Daugelis talpyklos įskiepių nuskaito šią konstantą ir tokį puslapį praleidžia. - Antraštės. Tuose pačiuose puslapiuose WooCommerce siunčia WordPress no-cache antraštes:
Cache-Control: no-cache, must-revalidate, max-age=0, privateir praeities datosExpires. Taisyklių besilaikantis tarpinis serveris (proxy) ar CDN tokio puslapio nesaugo. Prisijungusiems naudotojams pridedamano-store. - Slapukai. Kai tik kas nors įdeda prekę į krepšelį, WooCommerce nustato slapukus, pavyzdžiui,
woocommerce_items_in_cart,woocommerce_cart_hashirwp_woocommerce_session_.... Geros talpyklos lankytojams su tokiu slapuku nebeteikia išsaugoto puslapio, net ir prekių puslapių, nes, pavyzdžiui, krepšelis antraštėje tada kiekvienam lankytojui skiriasi.
WooCommerce dokumentacijoje talpyklos įskiepiams nurodoma: išskirkite krepšelio, Mano paskyros ir atsiskaitymo puslapius bei slapukus woocommerce_cart_hash, woocommerce_items_in_cart, wp_woocommerce_session_, woocommerce_recently_viewed ir store_notice[...]. Varnish atveju joje pateikiamos ir taisyklės adresams su ?add-to-cart=.
Kur praktikoje dažniausiai kyla problemų
- Kiti parduotuvės puslapių adresai. Krepšelį pervadinote į
/mandje/arba vertimo įskiepis sukuria/de/warenkorb/. Talpykla, kuri išskiria tik fiksuotus adresus, pvz.,/cart, jų nepastebi. WooCommerce pažįstantys talpyklos įskiepiai nuskaito puslapius iš nustatymų; serverio ar CDN talpykla to nedaro. - CDN, kuris talpina viską. Kai kurios CDN taisyklės („cache everything“) ignoruoja antraštes. Tokiu atveju aiškiai išskirkite parduotuvės puslapius ir minėtus slapukus.
- Įskiepis, perrašantis antraštes. Saugumo ar spartinimo įskiepis kartais kiekviename puslapyje nustato
Cache-Control: public, max-age=.... Tada no-cache antraščių nebelieka. - Sesija kiekvienam lankytojui. Paprastai WooCommerce sesijos slapuką nustato tik tada, kai krepšelyje kas nors yra. Jei įskiepis ar tema sesiją pradeda kiekvienam lankytojui (slapukas
wp_woocommerce_session_arbaPHPSESSIDjau per pirmąjį apsilankymą), puslapio talpykla neveikia niekam, o Jūsų e. parduotuvė didelio srauto metu tampa lėta. - Geolokacija. Skiltyje WooCommerce > Nustatymai > Pagrindiniai pasirenkate numatytąją kliento vietą. Pasirinkus paprastą „Naudoti geolokaciją“, serveris šalį nustato kiekvienam lankytojui atskirai, o kai kainos priklauso nuo šalies, tai nedera su puslapio talpykla. Todėl WooCommerce turi parinktį „Naudoti geolokaciją (su puslapio talpyklos palaikymu)“, kuri šalį nustato papildoma užklausa naršyklėje. Jei iki atsiskaitymo Jums nereikia kainų ar PVM pagal šalį, pasirinkite parduotuvės šalį: tai paprasčiausia. Geolokacijai WooCommerce periodiškai atsisiunčia MaxMind duomenų bazę.
LiteSpeed serveryje (kaip WebOké) įskiepis LiteSpeed Cache WooCommerce išimtis sutvarko pats; patikrinkite jas išimčių nustatymuose. Kituose žiniatinklio serveriuose ir pas kitus talpinimo paslaugų teikėjus su kitu talpyklos įskiepiu viskas veikia panašiai.
Ko puslapio talpykla neišsprendžia
Krepšelį ir atsiskaitymą visada sugeneruoja PHP ir duomenų bazė. Didelio srauto metu (akcija, naujienlaiškis) tai būtent tie puslapiai, kuriuose Jūsų klientai leidžia pinigus. Ten padeda kiti dalykai:
- Objektų talpykla, pavyzdžiui, Redis, saugo duomenų bazės užklausų rezultatus atmintyje. E. parduotuvėje, kurioje daug puslapių negali patekti į puslapio talpyklą, tai duoda pastebimai daugiau naudos nei paprastoje svetainėje. Jūsų talpinimo paslauga turi siūlyti Redis (WebOké tai įmanoma, DA 15.7); tada jį įjungiate įskiepiu.
- Krepšelio fragmentai. Klasikinės temos krepšelį antraštėje atnaujina scenarijumi (
wc-cart-fragments), kuris, kai krepšelis netuščias, siunčia papildomą užklausą. Modernioms blokų temoms su mini krepšelio bloku to reikia mažiau. Nekraukite tokių scenarijų puslapiuose, kuriuose jie nieko nedaro. - Išvalyti suplanuoti veiksmai. Foninėms užduotims WooCommerce naudoja Action Scheduler (7.3 pamoka). Užbaigti veiksmai pagal numatytuosius nustatymus išvalomi po mėnesio. Jei sąrašas vis tiek išauga iki šimtų tūkstančių, dažnai dėl plėtinio, kuris nuolat ką nors planuoja, arba dėl nepavykusių veiksmų, duomenų bazės užklausos sulėtėja. Skiltyje WooCommerce > Statusas > Suplanuoti veiksmai patikrinkite nepavykusių ir laukiančių veiksmų skaičių.
- HPOS. Užsakymai atskirose lentelėse (1.2 pamoka) leidžia užsakymų ieškoti greičiau nei senojoje įrašų lentelėje. Esamos parduotuvės turi pereiti pačios (6.2 pamoka apie atsargines kopijas prieš tai).
- Naujausia PHP versija ir pakankamai atminties (7.2 pamoka).
Praktikoje: kaip tai atrodo WooCommerce
Patikrinkite tai Theehuis Example parduotuvėje privačiajame lange su naršyklės kūrėjo įrankiais (F12, skirtukas Tinklas, pirmoji užklausa):
- Pagrindinis puslapis, įkelkite du kartus: antrą kartą matysite antraštę, pvz.,
x-litespeed-cache: hitarbacf-cache-status: HIT. Per pirmąjį apsilankymą slapukowp_woocommerce_session_neturi būti. shop.example.com/winkelwagen/, įkelkite du kartus: jokio pataikymo (hit), ocache-controlsuno-cachearbaprivate.- Tą patį patikrinkite atsiskaitymo ir Mano paskyros puslapiuose.
- Įdėkite prekę į krepšelį ir įkelkite prekės puslapį: matote savo krepšelį, o ne išsaugotą versiją.
Santrauka
- Visiems vienodi puslapiai gali būti talpykloje; krepšelis, atsiskaitymas ir Mano paskyra niekada.
- WooCommerce pati nustato DONOTCACHEPAGE, no-cache antraštes ir slapukus; patikrinkite, ar niekas jų nepanaikina ir neignoruoja.
- Atkreipkite dėmesį į pervadintus adresus, CDN taisykles, antraštes perrašančius įskiepius, sesijas kiekvienam lankytojui ir geolokaciją.
- Redis, išvalyti suplanuoti veiksmai, HPOS ir tinkama PHP versija padeda ten, kur puslapio talpykla negali.
- Testuokite įkeldami puslapį du kartus privačiajame lange ir skaitykite antraštes.
Testas (quiz)
Užduotis
Užduotis A6.4: Ar krepšelis ir atsiskaitymas lieka už podėlio ribų? Įveskite savo e. parduotuvės adresą ir krepšelio bei atsiskaitymo puslapių adresus (ir, jei norite, Mano paskyros). Programa du kartus su 2 sekundžių pertrauka, be slapukų, užklausia pagrindinį puslapį, o paskui taip pat du kartus kiekvieną parduotuvės puslapį. Į krepšelį nieko nededama ir nieko neužsakoma. Žalia, jei pagrindinis puslapis antrą kartą pateikiamas iš talpyklos (arba akivaizdžiai greičiau) nenustatydamas sesijos slapuko ir jei kiekvienas parduotuvės puslapis antrą kartą neturi talpyklos pataikymo ir siunčia Cache-Control su no-cache, no-store, private arba max-age=0. Oranžinė, jei pagrindinis puslapis nenaudoja talpyklos arba jei parduotuvės puslapis neturi pataikymo, bet ir nesiunčia no-cache antraštės. Raudona, jei krepšelio, atsiskaitymo ar Mano paskyros puslapyje yra talpyklos pataikymas arba jei pagrindinis puslapis kiekvienam lankytojui pradeda WooCommerce sesiją.
Žalia varnelė reiškia, kad šis patikrinimas dabar tvarkingas, o ne tai, kad Jūsų e. parduotuvė yra saugi.
Platesniam skaitymui
Veiksmai valdymo skydelyje taikomi WebOké; pas kitus paslaugų teikėjus viskas veikia panašiai.
- Nemokamas WordPress kursas 6.2: Talpykla (cache)
- Nemokamas WordPress kursas 6.3: Vaizdai, PHP ir kiti greičio patobulinimai
- DirectAdmin vadovas 15.7: Redis
- Mano svetainė veikia lėtai arba naudoja per daug CPU: kaip ją paspartinti
- Ar tai yra duomenų saugumo pažeidimas ir ar turiu apie tai pranešti?
- Configuring caching plugins (developer.woocommerce.com, anglų kalba): https://developer.woocommerce.com/docs/best-practices/performance/configuring-caching-plugins/
