Modul 6 · 6.2
Cachelagring
Modul 6: Hastighet · Lästid: 9 minuter
Lärandemål: Efter den här lektionen kan du förklara vilka typer av cache som finns och ställa in och kontrollera en sidcache på rätt sätt.
Nyckelbegrepp: sidcache, webbläsarcache, Cache-Control, objektcache, Redis, OPcache, CDN, cachetillägg, LiteSpeed Cache, undantag (inloggad, varukorg, kassa), tömma cache, dubbla cachetillägg
Cache: gör inte samma arbete två gånger
En cache sparar resultatet av ett arbete, så att det inte behöver göras om nästa gång. På en WordPress-webbplats finns det fyra ställen där detta sker, från störst till minst:
| Typ | Vad som sparas | Var | Effekt |
|---|---|---|---|
| Sidcache | Den kompletta HTML-koden för en sida | På servern (eller hos ett CDN) | Den största vinsten: PHP, tillägg och databas hoppas över |
| Webbläsarcache | Stilmallar, skript, bilder, typsnitt | I besökarens webbläsare | En andra sida laddas snabbare, eftersom filerna redan finns där |
| Objektcache | Resultat av databasfrågor | I serverns minne (Redis, Memcached) | Hjälper där en sidcache inte räcker till, till exempel för inloggade användare och webbutiker |
| OPcache | Den kompilerade PHP-koden | I PHP:s minne | PHP behöver inte läsa filer på nytt vid varje förfrågan; är påslaget som standard hos de flesta webbhotell |
Sidcachen
Lektion 1.2 visade det: utan cache skapar WordPress om hela sidan vid varje besök. Med en sidcache skapar den första besökaren den, och de följande får den sparade HTML-koden. En TTFB på en sekund kan på så sätt bli några hundradels sekunder, och ditt paket klarar av betydligt fler besökare samtidigt.
Hur du får en sidcache beror på din webbserver:
- LiteSpeed (många delade webbhotell, inklusive WebOké): webbservern har en egen cache. Det kostnadsfria tillägget LiteSpeed Cache styr den från WordPress: vilka sidor som får sparas i cachen, när de ska tömmas. Eftersom cachen sitter i webbservern startas PHP inte alls för en sparad sida.
- Apache eller nginx: ett cachetillägg som sparar HTML-koden som filer, till exempel WP Super Cache, W3 Total Cache eller ett betaltillägg som WP Rocket. Eller en cache som webbhotellet sköter på servernivå.
- Hanterat WordPress-webbhotell har ofta en egen cache; där installerar du vanligtvis inget cachetillägg.
Välj en. Två cachetillägg samtidigt (till exempel LiteSpeed Cache och WP Rocket) krockar med varandra: dubbelt arbete, sidor som inte töms, märkliga fel. På en LiteSpeed-server samarbetar LiteSpeed Cache med webbserverns cache; ett annat cachetillägg kan inte göra det.
Vad som inte ska cachelagras
En sidcache ger alla samma HTML. Det går fel på sidor som skiljer sig åt per besökare:
- inloggade användare (adminfältet, "Välkommen, Lisa");
- varukorgen, kassan och Mitt konto i en webbutik;
- sidor med ett formulär med en engångskod (nonce), som slutar gälla efter en tid;
- sidor som visar olika innehåll baserat på plats, språk eller en cookie.
Bra cachetillägg hoppar automatiskt över inloggade användare och de kända WooCommerce-sidorna. Vid andra tillägg (en medlemsdel, ett bokningssystem) måste du själv ställa in undantag. Tecknet på att det går fel: en besökare ser någon annans varukorg, eller ett formulär ger "har gått ut" eller "ogiltig begäran".
Tömma: när är cachen för gammal?
Ändrar du en sida måste den sparade versionen bort. Cachetillägg tömmer vanligtvis den sidan, startsidan och arkiven när ett inlägg sparas. Vid en ändring av menyn, temat eller en widget måste ofta hela cachen tömmas. Ser du den gamla versionen efter en ändring, töm då cachen (i cachetilläggets adminfält) och kontrollera i ett privat fönster, så att din egen webbläsarcache inte påverkar resultatet.
Webbläsarcachen
Servern talar om för webbläsaren med headers hur länge den får spara en fil:
cache-control: public, max-age=31536000Detta betyder: spara detta i ett år. För stilmallar, skript, typsnitt och bilder är en lång tid helt rätt, eftersom WordPress sätter en annan ?ver= efter adressen vid en ny version, och webbläsaren då ser det som en ny fil. För själva HTML-koden är en kort tid (eller ingen alls) vanligt, så att besökare ser ändringar snabbt.
Många webbhotell och cachetillägg sköter detta. I uppgiften för den här lektionen kontrollerar du det.
Objektcache och Redis
En sidcache hjälper inte för inloggade användare och inte för varukorgen. Där hjälper en objektcache: WordPress sparar resultatet av databasfrågor i minnet, i ett program som Redis eller Memcached. Nästa gång samma fråga kommer sparar WordPress svaret från minnet i stället för från databasen.
Det är framför allt användbart för webbutiker, medlemswebbplatser och webbplatser med många inloggade redaktörer. För en vanlig informationswebbplats med en sidcache är skillnaden liten. En objektcache kräver att ditt webbhotell erbjuder Redis eller Memcached; du aktiverar den sedan med ett tillägg (LiteSpeed Cache kan göra det, det finns även fristående tillägg).
Ett CDN
Ett CDN (content delivery network) är ett nätverk av servrar på många platser i världen som sparar kopior av dina filer (och ibland hela dina sidor). En besökare får dem från den närmaste servern. Det hjälper framför allt vid besökare långt bort och vid mycket trafik. För en europeisk webbplats med europeiska besökare på en europeisk server är vinsten liten. Ett CDN med proxy (som Cloudflare) ändrar också din DNS och ditt certifikat (DNS-kursen lektion 7.5); gör inte det utan att förstå vad det innebär.
I praktiken: så här ser det ut i en panel
Som exempel använder vi LiteSpeed Cache på en LiteSpeed-server. Andra cachetillägg har liknande inställningar under andra namn.
- Installera och aktivera LiteSpeed Cache under Tillägg > Lägg till nytt.
- Öppna LiteSpeed Cache > Cache: "Aktivera cache" är påslaget, "Cacha inloggade användare" är avslaget (om du inte vet exakt vad du gör).
- Vid en webbutik: kontrollera under Uteslut att varukorg, kassa och Mitt konto finns med (vid WooCommerce sker det automatiskt).
- Låt de övriga delarna (optimering av CSS och JavaScript, bilder) vara avstängda till en början. Slå på dem en i taget och testa efter varje steg: just dessa delar kan ibland göra sönder ett tema.
- Kontrollera i ett privat fönster med utvecklarverktygen (F12, Nätverk, första förfrågan): vid andra laddningen ska
x-litespeed-cache: hitvisas.
Sammanfattning
- Det finns fyra typer av cache: sida (den största vinsten), webbläsare, objekt och OPcache.
- På en LiteSpeed-server styr LiteSpeed Cache webbserverns cache; på Apache eller nginx använder du ett annat cachetillägg. Välj en.
- Inloggade användare, varukorg, kassa och personliga sidor hör inte hemma i sidcachen.
- Töm cachen efter ändringar av meny eller tema och kontrollera i ett privat fönster.
- En objektcache (Redis) hjälper vid webbutiker och inloggade användare; ett CDN hjälper framför allt vid besökare långt bort och mycket trafik.
Quiz
Uppgift
Uppgift A6.2: Fungerar din sidcache? Fyll i adressen till din webbplats. Programmet hämtar startsidan två gånger kort efter varandra, utan cookies, och tittar vid andra hämtningen efter headers som visar en cacheträff (x-litespeed-cache: hit, x-cache: HIT, cf-cache-status: HIT, ett age-värde större än 0, eller headern för en annan känd cache). Därefter hämtar det en stilmall från startsidan och kontrollerar om webbläsaren får spara den i minst sju dagar (cache-control: max-age eller expires). Notera vilken cache du använder.
Läs mer
Dessa artiklar beskriver stegen i WebOkés paneler; i andra paneler fungerar det på liknande sätt.
- DirectAdmin-guide 18.3: Min webbplats är långsam
- DirectAdmin-guide 15.7: Redis
- Din webbplats är långsam eller använder för mycket CPU: så gör du den snabbare
- OPcache: 30 sekunders fördröjning när en PHP-fil ändras
- Är gzip aktiverat i DirectAdmin och LiteSpeed eller Apache
- Cache i WordPress (developer.wordpress.org, engelska): https://developer.wordpress.org/advanced-administration/performance/cache/
