main

HostingWordPress

Caching i WordPress med mod_disk_cache

august 20, 2015 — by Øyvind Frøland0

Caching i WordPress løses som oftest vha. et eller annet plugin, som f.eks. W3 Total Cache eller WP Super Cache. Disse utvidelsene gir en vesentlig ytelsesforbedring for WordPress, men det finnes langt bedre alternative løsninger tilgjengelig, og i alle fall i kombinasjon med disse verktøyene.

Brorparten av alle WordPress-installasjoner benytter seg av Apache som webserver. Denne serveren kommer med innebygget støtte for caching i modulen mod_cache som gir deg garantert raskere WordPress-sider. I denne artikkelen kommer vi til å ta for oss mod_cache_disk.

Common misconceptions

Før vi fortsetter er det greit å oppklare noen etablerte «sannheter» blant mange webutviklere.

mod_cache_memcache er raskere enn mod_cache_disk

Dette er feil. Joda, minne er raskere enn disk, men mod_cache_memcache oppretter cache per prosess, og når Apache starter prosesser for å ta hånd om innkommende trafikk (besøkende til nettsiden) må det genereres cache for hver prosess. Dette medfører i sin tur duplikater i cachen, og blant annet større CPU-belastning, større cache, og lavere hitrate. mod_cache_disk oppretter derimot en cache som deles i mellom prosessene og er med dette mye mer effektivt.

Du kan lese en test om dette her:

IS303 Team wiki: G2T1 Experiment 5

mod_cache_disk er raskere enn mod_cache_memcache
mod_cache_disk er raskere enn mod_cache_memcache

WordPress-PLUGINS har samme ytelse

mod_cache benytter seg av et sendfile-API, som i praksis medfører at serveren ikke behøver å lese av filen før den leveres. Webserveren, Apache, identifiserer hvilken fil som skal leveres og destinasjonen via API’et, deretter leser operativsystemet (Linux-kernel) filen og leverer den. Det eliminerer behovet for et lese-API og minneallokering for å sende filen, og operativsystemet kan bruke filsystem-cachen; kernelen agerer som buffer, og øker ytelsen på cachen. Dette er helt utilgjengelig i et WordPress-plugin som f.eks. W3Total Cache.

Jeg må ha et plugin til å styre min cache

Ja og nei; det kommer litt an på. Det er selvsagt ikke alt du ønsker å cache, men konfigurert riktig vil en relativt clean WordPress-installasjon vil ikke ha noen som helst problemer med å bruke mod_cache_disk rett av. Problemene oppstår ikke før du begynner å ta i bruk ulike plugins:

  1. Utvidelser til WordPress har svært varierende kvalitet. Noen gjør ting de slett ikke skal og manipulerer (ødelegger) HTTP-headere som er helt nødvendige for at caching skal fungere.
  2. Avanserte WordPress installasjoner med brukerområder, handlekurver m.v. kan introdusere et mer avansert behov for å styre hvilke områder av nettsiden som skal caches. Det er imidlertid som oftest ingenting i veien for å styre dette fra konfigurasjonsfilen til Apache, fremfor å benytte et plugin som introduserer et hav av funksjonalitet som du ikke trenger, eller kjenner til, og med tilhørende feilkilder.

Det eneste reelle behovet foreligger altså når et eller annet plugin har ødelagt kjernefunksjonalitet i WordPress. Da trenger du et plugin som «tar over» og rydder opp. Her finnes det ulike alternativer, men det kommer vi tilbake til.

Ok, kan vi begynne nå?

Ja 🙂 For å sette opp mod_cache_disk må du aktivere modulene. Du finner instruksjoner for hvordan her:

Hvordan aktiverer jeg caching med mod_cache_disk?

Og that’s it. Skuffet? Du behøver ikke installere noe i WordPress, og du behøver ikke konfigurere noe i WordPress. Modulen er smart nok til å droppe caching ved f.eks. authentication-headers (områder som krever login). Du kan også styre hvilke områder på nettsiden du vil aktivere caching for.

Kan jeg bruke mod_disk_cache med W3 Total Cache?

Ja, spørsmålet er om du burde. Ved å bruke mod_cache_disk sammen med Page-caching i W3 Total Cache lagrer du cache to steder. Det er for så vidt ikke noe i veien for det, for når cachen blir brukt kommer mod_cache_disk til å servere filen fra sin cache først. Det er imidlertid fullstendig unyttig å lagre cache to steder, og du må alltid husk å tømme cache begge steder når du gjør endringer og ønsker å regenerere. Du bruker også ressurser på å generere cachen til W3 Total Cache, en cache som ikke blir brukt.

Du kan vurdere å skru av Page-caching i W3 Total Cache og benytte de andre modulene, som f.eks. Browser-caching. Hvis du gjør det må du være oppmerksom på at du delvis mister kontroll over cachen og langt på vei overlater styringen til den enkelte besøkende sin nettleser (eller andre potensielle feilkilder). Hvis du vil ha kontroll skrur du det av eller avinstallerer utvidelsen.

Dersom du har behov for W3 Total Cache for å korrigere for f.eks. ødelagte HTTP-headere kan du vurdere alternativer som gjør bare det du trenger:

WordPress › Add Headers « WordPress Plugins