Moodul 6 · 6.4
Kiirus ja vahemälu e-poes
Moodul 6: Haldus ja turvalisus · Lugemisaeg: 10 minutit
Õpieesmärk: Pärast seda õppetundi oskad WooCommerce’i e-poe vahemälu seadistada nii, et pood on kiire ja isiklikud lehed ei satu kunagi vahemällu. Oskad seda ka HTTP päistest kontrollida.
Põhimõisted: lehepuhver, välistused (ostukorv, kassa, Minu konto), vahemälust mööda suunavad küpsised, no-cache päised, DONOTCACHEPAGE, objektipuhver, Redis, ostukorvi fragmendid, geograafiline aadress koos lehepuhvriga, planeeritud tegevuste koristamine
Kahte tüüpi lehed
Vahemälu põhitõed (lehepuhver, brauseri vahemälu, objektipuhver, OPcache, CDN) on WordPressi kursuse õppetunnis 6.2. Seal on kirjas ka e-poodide jaoks kõige tähtsam reegel: isiklikud lehed ei tohi lehepuhvrisse sattuda. See õppetund selgitab seda lähemalt.
E-poes on kahte tüüpi lehti:
| Tüüp | Näited | Vahemälu |
|---|---|---|
| Kõigile ühesugune | avaleht, poeleht, kategooriad, tootelehed, infolehed | Lehepuhver: jah, siit tuleb suurim võit |
| Iga külastaja jaoks erinev | ostukorv, kassa, Minu konto, taganemise leht sisselogitud kliendiga | Lehepuhver: mitte kunagi |
Kui midagi läheb valesti, näed seda kohe: klient näeb kellegi teise ostukorvi või veel hullem, kellegi aadressi kassalehel. See on ka andmeleke isikuandmete kaitse üldmääruse (GDPR) mõttes (KB 6749).
Mida WooCommerce ise juba teeb
WooCommerce aitab vahemälu kolmel viisil. Neid tasub tunda, et märkaksid, kui miski need eemaldab:
- Konstandid. Ostukorvi, kassa ja Minu konto lehel seab WooCommerce
DONOTCACHEPAGE(ja samuti objekti- ja andmebaasipuhvri jaoks). Paljud vahemälupluginad loevad seda konstanti ja jätavad lehe siis vahele. - Päised. Samadel lehtedel saadab WooCommerce kaasa WordPressi no-cache päised:
Cache-Control: no-cache, must-revalidate, max-age=0, privateja mineviku kuupäevagaExpires. Reegleid järgiv puhverserver või CDN ei salvesta siis lehte. Sisselogitud kasutajatele lisandubno-store. - Küpsised. Niipea kui keegi lisab midagi ostukorvi, seab WooCommerce küpsised nagu
woocommerce_items_in_cart,woocommerce_cart_hashjawp_woocommerce_session_.... Head vahemälud ei anna sellise küpsisega külastajale enam salvestatud lehte, ka mitte tootelehti, sest näiteks päises olev ostukorv on siis iga külastaja jaoks erinev.
WooCommerce’i dokumentatsioon soovitab vahemälupluginates välistada ostukorvi, Minu konto ja kassa lehe ning küpsised woocommerce_cart_hash, woocommerce_items_in_cart, wp_woocommerce_session_, woocommerce_recently_viewed ja store_notice[...]. Varnishi jaoks annab see ka reeglid aadressidele, milles on ?add-to-cart=.
Kus praktikas asjad viltu lähevad
- Poelehtedel on teised aadressid. Oled ostukorvi ümber nimetanud aadressile
/mandje/või tõlkeplugin teeb aadressi/de/warenkorb/. Vahemälu, mis välistab kindlaid aadresse nagu/cart, jätab need kahe silma vahele. WooCommerce’i tundvad vahemälupluginad loevad lehed sätetest; serveri või CDN-i vahemälu seda ei tee. - CDN, mis puhverdab kõike. Mõni CDN-i reegel („cache everything“) eirab päiseid. Sel juhul välista poelehed ja nimetatud küpsised eraldi.
- Plugin, mis kirjutab päised üle. Mõni turva- või kiirusplugin seab igale lehele
Cache-Control: public, max-age=.... Siis no-cache päiseid enam ei ole. - Seanss igale külastajale. Tavaliselt seab WooCommerce seansiküpsise alles siis, kui ostukorvis on midagi. Kui plugin või teema loob seansi igale külastajale (küpsis
wp_woocommerce_session_võiPHPSESSIDjuba esimesel külastusel), kaob lehepuhver kõigi jaoks ja sinu e-pood on tipptundidel aeglane. - Geograafiline aadress. Menüüs WooCommerce > Sätted > Üldine valid kliendi vaikimisi asukoha. Tavalise valikuga „Geograafiline aadress“ arvutab server iga külastaja jaoks riigi ja riigipõhiste hindade korral ei sobi see lehepuhvriga. Seetõttu on WooCommerce’il valik „Geograafiline aadress (lehepuhvri toega)“, mis määrab riigi brauseris tehtava lisapäringuga. Kui sul ei ole enne kassat vaja riigipõhiseid hindu ega käibemaksu, vali poe riik: see on kõige lihtsam. Geograafilise aadressi jaoks laadib WooCommerce perioodiliselt alla MaxMindi andmebaasi.
LiteSpeedi serveris (nagu WebOkés) seadistab plugin LiteSpeed Cache WooCommerce’i välistused ise; kontrolli neid välistamise sätetes. Teiste veebiserverite ja majutajate puhul toimib see teise vahemälupluginaga sarnaselt.
Mida lehepuhver ei lahenda
Ostukorvi ja kassa lehe koostavad alati PHP ja andmebaas. Tipptundidel (kampaania, uudiskiri) on need just need lehed, kus kliendid raha kulutavad. Seal aitavad muud asjad:
- Objektipuhver nagu Redis hoiab andmebaasipäringute tulemusi mälus. E-poes, kus paljud lehed ei saa lehepuhvrisse minna, annab see märgatavalt rohkem kui tavalisel saidil. Sinu majutus peab Redist pakkuma (WebOkés saab, DA 15.7); seejärel lülitad selle pluginaga sisse.
- Ostukorvi fragmendid. Klassikalised teemad uuendavad päises olevat ostukorvi skriptiga (
wc-cart-fragments), mis teeb täidetud ostukorvi korral lisapäringu. Kaasaegsed plokiteemad koos miniostukorvi plokiga vajavad seda vähem. Ära laadi selliseid skripte lehtedel, kus neil pole midagi teha. - Koristatud planeeritud tegevused. WooCommerce kasutab taustatoimingute jaoks Action Schedulerit (õppetund 7.3). Lõpetatud tegevused koristatakse vaikimisi kuu aja pärast. Kui nimekiri kasvab ikkagi sadade tuhandeteni, sageli laienduse tõttu, mis planeerib pidevalt midagi, või ebaõnnestunud tegevuste tõttu, muutuvad andmebaasipäringud aeglasemaks. Vaata menüüs WooCommerce > Olek > Planeeritud tegevused ebaõnnestunud ja ootel tegevuste arvu.
- HPOS. Tellimused omaette tabelites (õppetund 1.2) muudavad tellimustest otsimise kiiremaks kui vanas postituste tabelis. Olemasolevad poed peavad ise üle minema (õppetund 6.2 eelnevate varukoopiate kohta).
- Ajakohane PHP versioon ja piisavalt mälu (õppetund 7.2).
Praktikas: nii näeb see WooCommerce’is välja
Kontrolli seda Theehuis Example’i näitel privaatses aknas oma brauseri arendajatööriistadega (F12, vahekaart Võrk (Network), esimene päring):
- Avaleht, laadi kaks korda: teisel korral päis nagu
x-litespeed-cache: hitvõicf-cache-status: HIT. Esimesel külastusel ei ole küpsistwp_woocommerce_session_. shop.example.com/winkelwagen/, laadi kaks korda: tabamust ei ole jacache-controlsisaldab väärtustno-cachevõiprivate.- Sama kassa ja Minu konto lehega.
- Lisa toode ostukorvi ja laadi tooteleht: näed oma ostukorvi, mitte salvestatud versiooni.
Kokkuvõte
- Kõigile ühesugused lehed vahemällu; ostukorv, kassa ja Minu konto mitte kunagi.
- WooCommerce seab ise DONOTCACHEPAGE, no-cache päised ja küpsised; kontrolli, et miski neid ei eemaldaks ega eiraks.
- Pane tähele ümbernimetatud aadresse, CDN-i reegleid, päiseid üle kirjutavaid pluginaid, igale külastajale loodud seansse ja geograafilist aadressi.
- Redis, koristatud planeeritud tegevused, HPOS ja sobiv PHP versioon aitavad seal, kus lehepuhver ei saa.
- Testi privaatses aknas kaks korda laadides ja loe päiseid.
Test (quiz)
Ülesanne
Ülesanne A6.4: Kas ostukorv ja kassa jäävad vahemälust välja? Sisesta oma e-poe aadress ning ostukorvi ja kassa lehe aadressid (soovi korral ka Minu konto). Programm pärib avalehte kaks korda 2-sekundilise vahega ilma küpsisteta ja seejärel iga poelehte samuti kaks korda. Ostukorvi ei lisata midagi ja midagi ei tellita. Roheline, kui avaleht tuleb teisel korral vahemälust (või on selgelt kiirem) ilma seansiküpsist seadmata ja kui ühelgi poelehel ei ole teisel korral vahemälu tabamust ning leht saadab päise Cache-Control väärtusega no-cache, no-store, private või max-age=0. Oranž, kui avaleht ei kasuta vahemälu või kui poelehel ei ole tabamust, kuid puudub ka no-cache päis. Punane, kui ostukorvi, kassa või Minu konto lehel on vahemälu tabamus või kui avaleht alustab igale külastajale WooCommerce’i seansi.
Roheline linnuke tähendab, et see kontroll on praegu korras, mitte seda, et sinu e-pood on turvaline.
Lisalugemist
Paneeli juhised kehtivad WebOké kohta; teiste teenusepakkujate juures toimib see sarnaselt.
- Tasuta WordPressi kursus 6.2: Vahemälu (caching)
- Tasuta WordPressi kursus 6.3: Pildid, PHP ja muud kiirusevõidud
- DirectAdmin juhend 15.7: Redis
- Mu veebileht on aeglane või kasutab liiga palju CPU-d: nii teed selle kiiremaks
- Kas see on andmeleke ja kas pean sellest teatama?
- Configuring caching plugins (developer.woocommerce.com, inglise keeles): https://developer.woocommerce.com/docs/best-practices/performance/configuring-caching-plugins/
