Modul 6 · 6.2
Caching
Modul 6: Hastighet · Lesetid: 9 minutter
Læringsmål: Etter denne leksjonen kan du forklare hvilke typer cache som finnes, og sette opp og kontrollere en sidemellomlager riktig.
Nøkkelbegreper: sidemellomlager, nettlesermellomlager, Cache-Control, objektcache, Redis, OPcache, CDN, cacheutvidelse, LiteSpeed Cache, unntak (innlogget, handlekurv, kasse), tømme cache, doble cacheutvidelser
Cache: unngå å gjøre samme jobb to ganger
En cache lagrer resultatet av et arbeid, slik at det ikke må gjøres på nytt neste gang. På et WordPress-nettsted finnes det fire steder dette skjer, fra størst til minst effekt:
| Type | Hva lagres | Hvor | Effekt |
|---|---|---|---|
| Sidemellomlager | Den komplette HTML-en til en side | På serveren (eller hos et CDN) | Den største gevinsten: PHP, utvidelser og database blir hoppet over |
| Nettlesermellomlager | Stilark, skript, bilder, skrifttyper | I nettleseren til besøkende | En andre side laster raskere, fordi filene allerede finnes der |
| Objektcache | Resultater av databasespørringer | I minnet til serveren (Redis, Memcached) | Hjelper der en sidemellomlager ikke kan, som for innloggede brukere og nettbutikker |
| OPcache | Den oversatte PHP-koden | I minnet til PHP | PHP trenger ikke lese filer på nytt for hver forespørsel; er som regel påslått som standard hos de fleste webhotell |
Sidemellomlageret
Leksjon 1.2 viste det: uten cache lager WordPress hele siden på nytt ved hvert besøk. Med en sidemellomlager lager den første besøkende den, og de neste får den lagrede HTML-en. En TTFB på ett sekund kan dermed bli noen hundredels sekund, og pakken din kan håndtere langt flere besøkende samtidig.
Hvordan du får en sidemellomlager, avhenger av webserveren din:
- LiteSpeed (mange delte webhotell, deriblant WebOké): webserveren har sin egen cache. Den gratis utvidelsen LiteSpeed Cache styrer den fra WordPress: hvilke sider som får ligge i cachen, og når de skal tømmes. Fordi cachen ligger i webserveren, startes PHP ikke i det hele tatt for en lagret side.
- Apache eller nginx: en cacheutvidelse som lagrer HTML-en som filer, som WP Super Cache, W3 Total Cache eller en betalt utvidelse som WP Rocket. Eller en cache som webhotellet styrer på servernivå.
- Administrert WordPress-hosting har ofte sin egen cache; da installerer du som regel ikke en cacheutvidelse.
Velg én. To cacheutvidelser samtidig (for eksempel LiteSpeed Cache og WP Rocket) kommer i veien for hverandre: dobbelt arbeid, sider som ikke blir tømt, merkelige feil. På en LiteSpeed-server jobber LiteSpeed Cache sammen med cachen i webserveren; en annen cacheutvidelse kan ikke gjøre det.
Hva som ikke skal ligge i cachen
En sidemellomlager gir alle samme HTML. Det går galt for sider som er forskjellige for hver besøkende:
- innloggede brukere (administrasjonslinjen, «Velkommen, Lisa»);
- handlekurven, kassen og Min konto i en nettbutikk;
- sider med et skjema med en engangskode (nonce), som utløper etter en stund;
- sider som viser noe annet basert på lokasjon, språk eller en informasjonskapsel.
Gode cacheutvidelser hopper automatisk over innloggede brukere og de kjente WooCommerce-sidene. For andre utvidelser (et medlemsområde, et bookingsystem) må du selv sette opp unntak. Tegnet på at noe går galt: en besøkende ser handlekurven til en annen, eller et skjema gir «utløpt» eller «ugyldig forespørsel».
Tømme: når er cachen utdatert?
Endrer du en side, må den lagrede versjonen bort. Cacheutvidelser tømmer som regel den siden, forsiden og arkivene når et innlegg lagres. Ved en endring i menyen, temaet eller en widget må ofte hele cachen tømmes. Ser du den gamle versjonen etter en endring, tøm da cachen (i administrasjonslinjen til cacheutvidelsen) og kontroller det i et privat vindu, slik at din egen nettlesermellomlager ikke spiller inn.
Nettlesermellomlageret
Serveren forteller nettleseren med headere hvor lenge den kan lagre en fil:
cache-control: public, max-age=31536000Dette betyr: lagre dette i ett år. For stilark, skript, skrifttyper og bilder er en lang periode helt fint, fordi WordPress setter en annen ?ver= bak adressen ved en ny versjon, slik at nettleseren oppfatter den som en ny fil. For selve HTML-en er en kort periode (eller ingen) vanlig, slik at besøkende raskt ser endringer.
Mange webhotell og cacheutvidelser ordner dette automatisk. I oppgaven til denne leksjonen kontrollerer du det.
Objektcache og Redis
En sidemellomlager hjelper ikke for innloggede brukere og ikke for handlekurven. Der hjelper en objektcache: WordPress lagrer resultatet av databasespørringer i minnet, i et program som Redis eller Memcached. Neste gang samme spørring kommer, henter WordPress svaret fra minnet i stedet for fra databasen.
Dette er spesielt nyttig for nettbutikker, medlemsnettsteder og nettsteder med mange innloggede redaktører. For et vanlig informasjonsnettsted med en sidemellomlager er forskjellen liten. En objektcache krever at webhotellet ditt tilbyr Redis eller Memcached; deretter slår du det på med en utvidelse (LiteSpeed Cache kan gjøre dette, det finnes også egne utvidelser).
Et CDN
Et CDN (content delivery network) er et nettverk av servere på mange steder i verden som lagrer kopier av filene dine (og noen ganger hele sidene dine). En besøkende får dem fra den nærmeste serveren. Dette hjelper spesielt for besøkende langt unna og ved mye trafikk. For et europeisk nettsted med europeiske besøkende på en europeisk server er gevinsten liten. Et CDN med proxy (som Cloudflare) endrer også DNS-en din og sertifikatet ditt (DNS-kurs leksjon 7.5); ikke gjør dette uten å forstå hva det innebærer.
I praksis: slik ser det ut i et kontrollpanel
Som eksempel bruker vi LiteSpeed Cache på en LiteSpeed-server. Andre cacheutvidelser har tilsvarende innstillinger under andre navn.
- Installer og aktiver LiteSpeed Cache under Utvidelser > Ny utvidelse.
- Åpne LiteSpeed Cache > Cache: «Aktiver cache» er påslått, «Cache innloggede brukere» er avslått (med mindre du vet hva du gjør).
- For en nettbutikk: kontroller under Ekskluder at handlekurv, kasse og Min konto står der (for WooCommerce skjer dette automatisk).
- La de andre delene (optimalisering av CSS og JavaScript, bilder) stå avslått først. Slå dem på én etter én og test etter hvert steg: det er nettopp disse delene som av og til ødelegger et tema.
- Kontroller i et privat vindu med utviklerverktøyene (F12, Nettverk, første forespørsel): ved andre gangs lasting skal det stå
x-litespeed-cache: hit.
Oppsummering
- Det finnes fire typer cache: side (den største gevinsten), nettleser, objekt og OPcache.
- På en LiteSpeed-server styrer LiteSpeed Cache cachen i webserveren; på Apache eller nginx bruker du en annen cacheutvidelse. Velg én.
- Innloggede brukere, handlekurv, kasse og personlige sider hører ikke hjemme i sidemellomlageret.
- Tøm cachen etter endringer i meny eller tema, og kontroller i et privat vindu.
- En objektcache (Redis) hjelper for nettbutikker og innloggede brukere; et CDN hjelper spesielt ved lang avstand og mye trafikk.
Quiz
Oppgave
Oppgave A6.2: Fungerer sidecachen din? Fyll inn adressen til nettstedet ditt. Programmet henter forsiden to ganger kort etter hverandre, uten informasjonskapsler, og ser ved andre forsøk etter headere som viser et cachetreff (x-litespeed-cache: hit, x-cache: HIT, cf-cache-status: HIT, en age større enn 0, eller headeren til en annen kjent cache). Deretter henter det ett stilark fra forsiden og kontrollerer om nettleseren kan lagre det i minst sju dager (cache-control: max-age eller expires). Noter hvilken cache du bruker.
Les mer
Disse artiklene beskriver stegene i kontrollpanelene til WebOké; i andre kontrollpaneler fungerer de på tilsvarende måte.
- DirectAdmin-veiledning 18.3: Nettstedet mitt er tregt
- DirectAdmin-veiledning 15.7: Redis
- Nettstedet mitt er tregt eller bruker for mye CPU: slik gjør du det raskere
- OPcache: 30 sekunders forsinkelse ved endring av PHP-fil
- Er gzip aktivert i DirectAdmin og LiteSpeed eller Apache?
- Cache i WordPress (developer.wordpress.org, engelsk): https://developer.wordpress.org/advanced-administration/performance/cache/
