WordPress caching, hoe werkt dat?

Dit artikel verscheen eerder op de blog van karelgeenen.nl.

Met behulp van caching wordt er een enorme snelheidswinst behaald bij het optimaliseren van websites. Een snelle laadtijd is natuurlijk gebruiksvriendelijk en daarom ook een belangrijke graadmeter van Google voor bepaling van de getoonde positie. Maar wat is WordPress caching? Waar en wanneer pas ik het toe? En tot slot, wie regelt de caching voor mij als gebruiker of beheerder van een site?

Dat komt allemaal aan bod in dit artikel.

Wat is caching?

Zie caching als het op een makkelijk bereikbare plaats opslaan van dingen die je vaak nodig hebt. Het Engelse woord ‘cache’ betekent in het Nederlands ‘opslagplaats’. Vergelijk het met een loodgieter die in zijn bus altijd veelgebruikte koppelingsstukken & buizen heeft liggen. Dat is een stuk efficiënter dan dat hij voor elke koppeling terug naar de zaak moet rijden om deze op te halen.

Hoe werkt dit voor webpagina’s?

Wanneer iemand een webpagina opvraagt zal dit verzoek door de webserver doorgezet worden naar WordPress, hier worden vervolgens een aantal stappen afgehandeld voordat de webpagina teruggegeven wordt aan de bezoeker.

Het ophalen en samenstellen van de pagina kost tijdelijk capaciteit op de server. Bij grote hoeveelheden bezoek kan dit voor een aardige belasting op de server zorgen waardoor vertraging op kan treden.

Het samenstellen wordt voor iedere aanroep van dezelfde pagina opnieuw gedaan, waardoor WordPress steeds weer opnieuw moeite moeten doen om dezelfde pagina op te bouwen. Als twee verschillende bezoekers beide de pagina abc.nl/xyz.php ophalen wordt deze ook twee keer samengesteld.

Juist het steeds weer opnieuw ophalen van dezelfde informatie (op jouw WordPress site) kunnen we met caching voorkomen. Door middel van caching slaan we het resultaat (of delen van het resultaat) op in een tijdelijke locatie, waardoor het sneller toegankelijk is wanneer het een tweede of derde keer aangeroepen wordt.

In het geval van de eerste bezoeker op abc.nl/xyz.php moet de pagina geheel worden samengesteld, vervolgens wordt deze naar de bezoeker teruggestuurd én in de cache opgeslagen. De tweede bezoeker op abc.nl/xyz.php krijgt de pagina veel sneller uit de cache terug en heeft zo een snellere laadtijd.

Waar wordt caching toegepast?

Technisch gezien kan caching op veel plaatsen toegepast worden. Maar grofweg gezien: zowel aan de server­ als aan de bezoekerskant (lees: browser).
Daarnaast kun je volledige pagina’s cachen (page­caching) of onderdelen van pagina’s (opcode of database caching).

Onderstaand schema geeft een overzicht van mogelijke pagina caching opties binnen de volledige stack.


WordPress Caching Lagen

Klik om groter te maken

Logischerwijs, hoe dichter bij de bezoeker gecached kan worden hoe sneller de ervaring voor de bezoeker.

Pagecache laag één: Browsercache

De eerste laag wordt lokaal bij de gebruiker op zijn systeem gecached waardoor de content niet via het internet opgehaald hoeft te worden. Dit is veruit het snelst.
Ondanks het feit dat de caching binnen de bovenste laag bij de gebruiker neergezet wordt kan er wel degelijk binnen de hosting omgeving bepaald worden wat hier gecached wordt.

De (betere) hoster zal bij de eerste keer dat een gebruiker een pagina ophaalt een max­age, e­tag of not­modified­since header meesturen met een tijd waarde. Daardoor weet de browser van de bezoeker dat hij gedurende deze tijd de pagina moet bewaren en niet de content opnieuw moet gaan opvragen over het internet.

Pagecache laag drie: Plugins

Pagecaching in de onderste twee lagen wordt in WordPress gerealiseerd door caching plugins zoals bijv. W3­ Total­ Cache, WP Rocket of WP Super­cache.

Deze caching methoden kunnen zeker bijdragen aan snelheidswinst maar staan, zoals eerder aangegeven, het verst weg van de bezoeker, hiervoor dient eerst altijd een WordPress opgestart te worden alvorens de cache gevuld of aan de gebruiker terug gegeven kan worden.

Slaan we nu niet een laag over?

Heel scherp, we hebben laag twee overgeslagen. Laag twee komt veruit het minste voor en is het moeilijkste zelf in te regelen als site-­eigenaar.
Laag twee is namelijk een reverse proxy cache, een voorbeeld hiervan is Varnish caching. Deze vorm van caching staat nog vóór de webserver waar WordPress op draait, en is dus het eerste contact met de pc van de bezoeker.

Wanneer een willekeurige bezoeker een pagina binnen WordPress opvraagt wordt het resultaat hiervan opgeslagen in de caching proxy en terug gegeven aan die bezoeker. Voor elke volgende bezoeker die dezelfde pagina opvraagt zal de caching proxy direct het resultaat wat opgeslagen is in het geheugen terug geven zonder dat WordPress hieraan te pas komt.

Kun je altijd cachen?

Caching is niet altijd verstandig. Vooral in gevallen waarin er elementen op een pagina staan die voor elke bezoeker anders moeten zijn. Het beste voorbeeld is een blok met de inhoud van je winkelmand die op elke pagina zichtbaar is. Wat er in de winkelmand getoond wordt moet per bezoeker individueel gecheckt worden en daarmee mogen dus alle pagina’s met een winkelmandje niet uit een cache komen.

Extra vormen van caching

Naast de al beschreven vorm van het cachen van hele pagina’s zijn er nog meer zaken die gecached kunnen worden. Namelijk database queries en opcode. Dit zijn eigenlijk kleinere objecten die gebruikt worden voor het samenstellen van een hele webpagina. Als je de webpagina zelf dus niet kan cachen, bijv. doordat er een winkelmandje opstaat, kun je vaak nog wel de kleinere objecten cachen. Voor de overzichtelijkheid staan deze vormen niet in het schema.

Database caching

Bij database caching wordt de uitkomst van veelgebruikte database queries opgeslagen. In plaats van dat de database bijv. elke keer opnieuw de laatste 10 posts op chronologische volgorde moet gaan opzoeken wordt deze uitkomst opgeslagen in het cache geheugen en is dus zo sneller toegankelijk.

Opcode caching

Veel CMS systemen (ook WordPress) zijn geschreven in de taal PHP. Voordat een server iets kan doen met PHP moet deze code eerst ‘vertaalt’ worden in een taal die de server begrijpt. De vertaalde vorm van PHP wordt ‘opcode’ genoemd en deze wordt in het geheugen van de server opgeslagen bij opcode caching. Zo wordt de vertaalstap overgeslagen en snelheidswinst geboekt.

Wat gebeurt er met nieuwe content?

Stel dat je een nieuwe blogpost hebt gepubliceerd, dan wil je natuurlijk dat die meteen op jouw homepage verschijnt. Maar wat als jouw homepage is opgeslagen in de caching proxy of in de cache vanW3TotalCache?

Dan zien je bezoekers niet je laatste post bovenaan staan maar de versie in de cache. Op zo’n moment is het belangrijk dat de cache wordt leeggemaakt en de nieuwste content weer zichtbaar is voor iedereen.

Dat leegmaken kan op allerlei manieren gebeuren en verschilt heel erg per implementatie. Soms zit er een knop om de cache te legen. Soms is het automatisch gekoppeld aan het publiceren van een nieuwe post of pagina. WordPress geeft een seintje als dat soort acties uitgevoerd worden, dit heet een ‘hook’.

Wie regelt de WordPress caching van mijn site voor mij?

Afhankelijk van de caching locatie kun je of zelf caching inregelen, of is je hoster verantwoordelijk voor de caching van je site. Over het algemeen kun je op browser caching en pagina caching zelf invloed uitoefenen door bijv. plugins als W3TC of WP Rocket.

De snelste laag na browser caching, de reverse proxy cache, is bij uitstek een techniek welke je hoster in hun architectuur op zal moeten nemen. Bij Savvii maken we gebruik van de reverse proxy cache Varnish om sites te versnellen.

In dit bericht heb ik getracht een overzichtelijke uitleg te geven omtrent caching. Mocht je na het lezen van dit artikel nog vragen hebben laat dan een reactie achter!

Tweet about this on TwitterShare on LinkedInShare on Facebook

Reageer

(wordt niet getoond)(wordt niet getoond)
(wordt niet getoond)
* verplichte velden

Je site versnellen met WP Rocket caching plugin

[…]  Savvii (Managed WordPress hosting) zegt hierover: “Zie caching als het op een makkelijk bereikbare plaats opslaan van dingen die je vaak nodig hebt. Het Engelse woord ‘cache’ betekent in het Nederlands ‘opslagplaats’. Vergelijk het met een loodgieter die in zijn bus altijd veelgebruikte koppelingsstukken & buizen heeft liggen. Dat is een stuk efficiënter dan dat hij voor elke koppeling terug naar de zaak zou moeten rijden om deze op te halen.” (lees het hele artikel) […]

Reageer

Terug naar overzicht

Wij werken met:

  • rackspace_savvii
  • New Relic
  • nginx_savvii
  • Varnish
  • Mandrill
  • Freshdesk