Modul 6 · 6.2
Predpomnjenje (caching)
Modul 6: Hitrost · Čas branja: 9 minut
Učni cilj: Po tej lekciji boste znali razložiti, katere vrste predpomnilnika obstajajo, ter pravilno nastaviti in preveriti predpomnilnik strani.
Ključni pojmi: predpomnilnik strani, predpomnilnik brskalnika, Cache-Control, predpomnilnik objektov, Redis, OPcache, CDN, vtičnik za predpomnjenje, LiteSpeed Cache, izjeme (prijavljeni uporabniki, košarica, zaključek nakupa), praznjenje predpomnilnika, podvojeni vtičniki za predpomnjenje
Predpomnilnik: ne opravljajte istega dela dvakrat
Predpomnilnik shrani rezultat dela, da ga naslednjič ni treba ponoviti. Pri spletnem mestu WordPress obstajajo štiri mesta, kjer se to dogaja, od največjega do najmanjšega:
| Vrsta | Kaj se shrani | Kje | Učinek |
|---|---|---|---|
| Predpomnilnik strani | Celotna HTML-koda strani | Na strežniku (ali pri CDN-ju) | Največja pridobitev: PHP, vtičniki in podatkovna baza se povsem izpustijo |
| Predpomnilnik brskalnika | Slogovne datoteke (stylesheets), skripte, slike, pisave | V brskalniku obiskovalca | Druga stran se naloži hitreje, ker so datoteke že na voljo |
| Predpomnilnik objektov | Rezultati poizvedb v podatkovno bazo | V pomnilniku strežnika (Redis, Memcached) | Pomaga tam, kjer predpomnilnik strani ne more, na primer pri prijavljenih uporabnikih in spletnih trgovinah |
| OPcache | Prevedena koda PHP | V pomnilniku PHP | PHP-ju ni treba datotek znova brati pri vsaki zahtevi; pri večini ponudnikov gostovanja je privzeto vklopljen |
Predpomnilnik strani
Lekcija 1.2 je to prikazala: brez predpomnilnika WordPress ob vsakem obisku znova ustvari celotno stran. S predpomnilnikom strani jo ustvari prvi obiskovalec, naslednji pa dobijo shranjeno HTML-kodo. TTFB ene sekunde se tako lahko zmanjša na nekaj stotink sekunde, Vaš paket pa lahko prenese veliko več obiskovalcev hkrati.
Kako pridobite predpomnilnik strani, je odvisno od Vašega spletnega strežnika:
- LiteSpeed (veliko skupnega gostovanja, med drugim WebOké): spletni strežnik ima lasten predpomnilnik. Brezplačni vtičnik LiteSpeed Cache ga upravlja iz WordPressa: katere strani smejo v predpomnilnik, kdaj se izpraznijo. Ker je predpomnilnik v spletnem strežniku, se za shranjeno stran PHP sploh ne zažene.
- Apache ali nginx: vtičnik za predpomnjenje, ki HTML shrani kot datoteke, na primer WP Super Cache, W3 Total Cache ali plačljiv vtičnik, kot je WP Rocket. Ali predpomnilnik, ki ga ponudnik gostovanja upravlja na ravni strežnika.
- Upravljano gostovanje WordPress ima pogosto svoj lasten predpomnilnik; tam običajno ne nameščate vtičnika za predpomnjenje.
Izberite enega. Dva vtičnika za predpomnjenje hkrati (na primer LiteSpeed Cache in WP Rocket) si nasprotujeta: dvojno delo, strani, ki se ne izpraznijo, čudne napake. Na strežniku LiteSpeed vtičnik LiteSpeed Cache deluje s predpomnilnikom spletnega strežnika; drug vtičnik za predpomnjenje tega ne zmore.
Kaj ne sme v predpomnilnik
Predpomnilnik strani vsem ponudi enako HTML-kodo. To povzroča težave pri straneh, ki so za vsakega obiskovalca drugačne:
- prijavljeni uporabniki (vrstica za urejanje, "Dobrodošli, Lisa");
- košarica, zaključek nakupa in Moj račun pri spletni trgovini;
- strani z obrazcem z enkratno kodo (nonce), ki po določenem času poteče;
- strani, ki glede na lokacijo, jezik ali piškotek prikažejo nekaj drugega.
Dobri vtičniki za predpomnjenje samodejno izločijo prijavljene uporabnike in znane strani WooCommerce. Pri drugih vtičnikih (razdelek za člane, sistem za rezervacije) morate izjeme nastaviti sami. Znak, da gre kaj narobe: obiskovalec vidi košarico nekoga drugega, ali obrazec sporoči "poteklo" oziroma "neveljavna zahteva".
Praznjenje: kdaj je predpomnilnik zastarel?
Če prilagodite stran, mora shranjena različica izginiti. Vtičniki za predpomnjenje ob shranjevanju prispevka običajno izpraznijo to stran, domačo stran in arhive. Pri spremembi menija, teme ali gradnika (widget) je pogosto treba izprazniti celoten predpomnilnik. Če po spremembi še vedno vidite staro različico, izpraznite predpomnilnik (v vrstici za urejanje vtičnika za predpomnjenje) in preverite v zasebnem oknu, da Vaš lastni predpomnilnik brskalnika ne vpliva na rezultat.
Predpomnilnik brskalnika
Strežnik brskalniku z glavami sporoči, kako dolgo sme hraniti datoteko:
cache-control: public, max-age=31536000To pomeni: shrani to eno leto. Za slogovne datoteke, skripte, pisave in slike je dolg čas povsem primeren, saj WordPress ob novi različici za naslov doda drug ?ver=, brskalnik pa to prepozna kot novo datoteko. Za samo HTML-kodo je običajen kratek čas (ali brez), da obiskovalci spremembe vidijo hitro.
Veliko ponudnikov gostovanja in vtičnikov za predpomnjenje to uredi samodejno. V nalogi te lekcije to preverite.
Predpomnilnik objektov in Redis
Predpomnilnik strani ne pomaga pri prijavljenih uporabnikih in ne pri košarici. Tam pomaga predpomnilnik objektov: WordPress rezultat poizvedb v podatkovno bazo shrani v pomnilnik, v programu, kot je Redis ali Memcached. Ko naslednjič pride ista poizvedba, WordPress odgovor pridobi iz pomnilnika namesto iz podatkovne baze.
To je zlasti koristno za spletne trgovine, strani za člane in spletna mesta z veliko prijavljenimi uredniki. Pri navadnem informativnem spletnem mestu s predpomnilnikom strani je razlika majhna. Predpomnilnik objektov zahteva, da Vaš ponudnik gostovanja ponuja Redis ali Memcached; nato ga vklopite z vtičnikom (zna ga tudi LiteSpeed Cache, obstajajo pa tudi samostojni vtičniki).
CDN
CDN (content delivery network, omrežje za dostavo vsebine) je omrežje strežnikov na mnogih mestih po svetu, ki hranijo kopije Vaših datotek (včasih tudi celih strani). Obiskovalec jih dobi z najbližjega strežnika. To najbolj pomaga pri obiskovalcih od daleč in pri velikem prometu. Pri nizozemski strani z nizozemskimi obiskovalci na nizozemskem strežniku je pridobitev majhna. CDN s proxyjem (kot je Cloudflare) spremeni tudi Vaš DNS in Vaš certifikat (tečaj DNS, lekcija 7.5); tega ne storite, ne da bi razumeli, kaj to pomeni.
V praksi: tako je videti v nadzorni plošči
Kot primer uporabimo LiteSpeed Cache na strežniku LiteSpeed. Drugi vtičniki za predpomnjenje imajo podobne nastavitve pod drugimi imeni.
- Namestite in aktivirajte LiteSpeed Cache pod Vtičniki > Dodaj nov vtičnik.
- Odprite LiteSpeed Cache > Cache: "Omogoči predpomnilnik" naj bo vklopljeno, "Predpomnilnik za prijavljene uporabnike" naj bo izklopljeno (razen če veste, kaj delate).
- Pri spletni trgovini: preverite pod Izloči, da so košarica, zaključek nakupa in Moj račun vključeni (pri WooCommerce se to zgodi samodejno).
- Druge možnosti (optimizacija CSS in JavaScript, slike) pustite najprej izklopljene. Vklapljajte jih eno po eno in po vsakem koraku preizkusite: prav te možnosti včasih razbijejo temo.
- Preverite v zasebnem oknu z razvojnimi orodji (F12, Omrežje, prva zahteva): ob drugem nalaganju bi morala biti prisotna glava
x-litespeed-cache: hit.
Povzetek
- Obstajajo štiri vrste predpomnilnika: stran (največja pridobitev), brskalnik, objekt in OPcache.
- Na strežniku LiteSpeed vtičnik LiteSpeed Cache upravlja predpomnilnik spletnega strežnika; na Apache ali nginx uporabite drug vtičnik za predpomnjenje. Izberite enega.
- Prijavljeni uporabniki, košarica, zaključek nakupa in osebne strani ne sodijo v predpomnilnik strani.
- Po spremembah menija ali teme izpraznite predpomnilnik in preverite v zasebnem oknu.
- Predpomnilnik objektov (Redis) pomaga pri spletnih trgovinah in prijavljenih uporabnikih; CDN predvsem pri obiskovalcih od daleč in velikem prometu.
Kviz
Naloga
Naloga A6.2: Ali deluje Vaš predpomnilnik strani? Vnesite naslov svojega spletnega mesta. Program dvakrat na kratko zapored, brez piškotkov, zahteva domačo stran in pri drugem poskusu preveri glave, ki kažejo na zadetek v predpomnilniku (x-litespeed-cache: hit, x-cache: HIT, cf-cache-status: HIT, vrednost age, večja od 0, ali glava kakega drugega znanega predpomnilnika). Nato zahteva eno slogovno datoteko z domače strani in preveri, ali jo sme brskalnik hraniti vsaj sedem dni (cache-control: max-age ali expires). Zabeležite, kateri predpomnilnik uporabljate.
Dodatno branje
Ti članki opisujejo korake v nadzornih ploščah WebOké; v drugih nadzornih ploščah delujejo podobno.
- Priročnik DirectAdmin 18.3: Moja spletna stran je počasna
- Priročnik DirectAdmin 15.7: Redis
- Moje spletno mesto je počasno ali porablja preveč procesorske moči: tako ga pohitrite
- OPcache: 30 sekund zamika pri spremembi datoteke PHP
- Ali je gzip vklopljen v DirectAdminu in LiteSpeed ali Apache
- Predpomnjenje v WordPressu (developer.wordpress.org, angleško): https://developer.wordpress.org/advanced-administration/performance/cache/
