Moodul 6 · 6.2
Vahemälu (caching)
Moodul 6: Kiirus · Lugemisaeg: 9 minutit
Õpieesmärk: pärast seda õppetundi oskad selgitada, millised vahemälu liigid on olemas, ning lehepuhvrit õigesti seadistada ja kontrollida.
Põhimõisted: lehepuhver, brauseripuhver, Cache-Control, objektipuhver, Redis, OPcache, CDN, vahemälu plugin, LiteSpeed Cache, erandid (sisse logitud, ostukorv, kassasse minek), vahemälu tühjendamine, kaks vahemälu plugiunit korraga
Vahemälu: ära tee sama tööd kaks korda
Vahemälu (cache) hoiab alles juba tehtud töö tulemuse, et seda järgmisel korral uuesti teha ei peaks. WordPressi saidil on neli kohta, kus see toimub, suurimast mõjust väikseimani:
| Liik | Mida salvestatakse | Kus | Mõju |
|---|---|---|---|
| Lehepuhver | Terve lehe HTML | Serveris (või CDN-is) | Suurim võit: PHP, pluginad ja andmebaas jäävad vahele |
| Brauseripuhver | Laaditabelid (CSS), skriptid, pildid, fondid | Külastaja brauseris | Järgmine leht laadib kiiremini, sest failid on juba olemas |
| Objektipuhver | Andmebaasipäringute tulemused | Serveri mälus (Redis, Memcached) | Aitab seal, kus lehepuhver ei saa, näiteks sisselogitud kasutajate ja veebipoodide puhul |
| OPcache | Tõlgendatud PHP-kood | PHP mälus | PHP ei pea faile iga päringu korral uuesti lugema; enamiku majutajate juures on vaikimisi sees |
Lehepuhver
Õppetund 1.2 näitas: ilma vahemäluta koostab WordPress iga külastuse korral terve lehe uuesti. Lehepuhvriga koostab lehe esimene külastaja ja järgmised saavad salvestatud HTML-i. Nii võib ühe sekundi pikkune TTFB kahaneda mõne sajandiku sekundini ja su pakett suudab korraga teenindada palju rohkem külastajaid.
Kuidas lehepuhvrit saada, sõltub su veebiserverist:
- LiteSpeed (paljud jagatud majutuse teenused, sealhulgas WebOké): veebiserveril on oma vahemälu. Tasuta plugin LiteSpeed Cache juhib seda WordPressist: millised lehed tohivad vahemällu minna, millal need tühjendatakse. Kuna vahemälu asub veebiserveris, ei käivitata salvestatud lehe jaoks PHP-d üldse.
- Apache või nginx: vahemälu plugin, mis salvestab HTML-i failidena, näiteks WP Super Cache, W3 Total Cache või tasuline plugin nagu WP Rocket. Või vahemälu, mille majutaja korraldab serveri tasandil.
- Hallatud WordPressi majutusel on sageli oma vahemälu; sinna ei paigalda sa tavaliselt eraldi vahemälu pluginat.
Vali üks. Kaks vahemälu pluginit korraga (näiteks LiteSpeed Cache ja WP Rocket) segavad teineteist: topelttöö, lehed, mida ei tühjendata, imelikud vead. LiteSpeedi serveris töötab LiteSpeed Cache koos veebiserveri enda vahemäluga; teine vahemälu plugin seda teha ei saa.
Mis ei tohi vahemällu minna
Lehepuhver annab kõigile sama HTML-i. See läheb valesti lehtedega, mis on iga külastaja jaoks erinevad:
- sisselogitud kasutajad (halduspaneel, „Tere tulemast, Lisa“);
- ostukorv, kassasse minek ja Minu konto veebipoes;
- lehed, millel on ühekordse koodiga vorm (nonce), mis aja möödudes aegub;
- lehed, mis näitavad eri sisu asukoha, keele või küpsise põhjal.
Head vahemälu pluginad jätavad sisselogitud kasutajad ja tuntud WooCommerce'i lehed automaatselt vahele. Teiste pluginate puhul (liikmete ala, broneerimissüsteem) pead erandid ise seadistama. Märk, et midagi on valesti: külastaja näeb kellegi teise ostukorvi või vorm teatab „aegunud“ või „kehtetu päring“.
Tühjendamine: millal on vahemälu vananenud?
Kui muudad lehte, peab salvestatud versioon kaduma. Vahemälu pluginad tühjendavad postituse salvestamisel tavaliselt selle lehe, avalehe ja arhiivid. Menüü, teema või vidina muutmisel tuleb sageli tühjendada kogu vahemälu. Kui näed pärast muudatust endiselt vana versiooni, tühjenda vahemälu (vahemälu plugina halduspaneelist) ja kontrolli seda privaatses aknas, et su enda brauseripuhver segadust ei tekitaks.
Brauseripuhver
Server ütleb brauserile päiste abil, kui kaua ta faili säilitada tohib:
cache-control: public, max-age=31536000See tähendab: hoia seda aasta aega. Laaditabelite (CSS), skriptide, fontide ja piltide puhul on pikk aeg sobiv, sest WordPress lisab uue versiooni korral aadressi taha teistsuguse ?ver= ja brauser käsitleb seda siis uue failina. HTML-i enda puhul on tavapärane lühike aeg (või mitte üldse), et külastajad näeksid muudatusi kiiresti.
Paljud majutajad ja vahemälu pluginad lahendavad selle ise. Selle õppetunni ülesandes kontrollid seda ise.
Objektipuhver ja Redis
Lehepuhver ei aita sisselogitud kasutajate ega ostukorvi puhul. Seal aitab objektipuhver: WordPress hoiab andmebaasipäringute tulemused mälus, programmis nagu Redis või Memcached. Kui sama päring tuleb järgmine kord, võtab WordPress vastuse mälust, mitte andmebaasist.
See on kasulik eelkõige veebipoodide, liikmesaitide ja paljude sisselogitud toimetajatega saitide puhul. Tavalise infosaidi puhul, kus on olemas lehepuhver, on vahe väike. Objektipuhver eeldab, et su majutaja pakub Redist või Memcachedi; selle lülitad sisse plugina abil (LiteSpeed Cache oskab seda, on ka eraldi pluginaid).
CDN
CDN (content delivery network) on serverite võrgustik paljudes kohtades üle maailma, mis hoiab su failide (ja mõnikord ka tervete lehtede) koopiaid. Külastaja saab need lähimast serverist. See aitab eelkõige kaugemal asuvate külastajate ja suure külastatavuse korral. Euroopa saidi puhul, kus külastajad on samast piirkonnast ja server samuti, on võit väike. Puhverdusega CDN (nagu Cloudflare) muudab ka su DNS-i ja sertifikaati (DNS-kursuse õppetund 7.5); ära tee seda enne, kui mõistad, mida see teeb.
Praktikas: nii näeb see paneelis välja
Näitena kasutame LiteSpeed Cache'i LiteSpeedi serveris. Teistel vahemälu pluginatel on sarnased seaded teiste nimede all.
- Paigalda ja aktiveeri LiteSpeed Cache menüüs Pluginad > Lisa uus.
- Ava LiteSpeed Cache > Cache: „Luba vahemälu“ (Cache inschakelen) on sees, „Vahemälu sisselogitud kasutajatele“ väljas (kui sa just ei tea täpselt, mida teed).
- Veebipoe puhul: kontrolli jaotises Jäta välja, et ostukorv, kassasse minek ja Minu konto on seal kirjas (WooCommerce'i puhul juhtub see automaatselt).
- Jäta ülejäänud valikud (CSS ja JavaScripti optimeerimine, pildid) esialgu väljalülitatuks. Lülita need ükshaaval sisse ja testi pärast igat sammu: just need valikud lõhuvad vahel teema.
- Kontrolli privaatses aknas arendustööriistadega (F12, Võrk, esimene päring): teisel laadimisel peaks nähtaval olema
x-litespeed-cache: hit.
Kokkuvõte
- Vahemälu liike on neli: leht (suurim võit), brauser, objekt ja OPcache.
- LiteSpeedi serveris juhib LiteSpeed Cache veebiserveri enda vahemälu; Apache või nginxi puhul kasutad teist vahemälu pluginat. Vali üks.
- Sisselogitud kasutajad, ostukorv, kassasse minek ja isiklikud lehed ei kuulu lehepuhvrisse.
- Tühjenda vahemälu pärast menüü või teema muutmist ja kontrolli tulemust privaatses aknas.
- Objektipuhver (Redis) aitab veebipoodides ja sisselogitud kasutajate puhul; CDN eelkõige kaugete külastajate ja suure liikluse korral.
Test (quiz)
Ülesanne
Ülesanne A6.2: Kas su lehepuhver töötab? Sisesta oma saidi aadress. Programm küsib avalehte kaks korda lühikese aja jooksul järjest, ilma küpsisteta, ja vaatab teisel korral päiseid, mis viitavad vahemälu tabamusele (x-litespeed-cache: hit, x-cache: HIT, cf-cache-status: HIT, age, mis on suurem kui 0, või mõne muu tuntud vahemälu päis). Seejärel küsib programm avalehelt ühe laaditabeli (CSS-faili) ja kontrollib, kas brauser tohib seda hoida vähemalt seitse päeva (cache-control: max-age või expires). Märgi üles, millist vahemälu sa kasutad.
Lisalugemist
Need artiklid kirjeldavad samme WebOké paneelides; teistes paneelides toimivad need sarnaselt.
- DirectAdmin juhend 18.3: Minu veebileht on aeglane
- DirectAdmin juhend 15.7: Redis
- Minu veebisait on aeglane või kasutab liiga palju protsessoriaega: nii teed selle kiiremaks
- OPcache: 30-sekundiline viivitus PHP-faili muutmisel
- Kas gzip on DirectAdminis ja LiteSpeedis või Apaches aktiveeritud?
- Vahemälu WordPressis (developer.wordpress.org, inglise keeles): https://developer.wordpress.org/advanced-administration/performance/cache/
