Websitecache & servercache: zo werkt caching in WordPress

Affiliatemelding v3.1
Affiliatemelding v3.2 (mobiel)

Toen ik websitecache en servercache controleerde op een server met Nginx + Apache, liepen WordPress-paginaverzoeken in volgorde van de browser via CDN, paginacache, OPcache en Redis naar beneden en stopten ze bij de laag die een kopie had. Paginaverzoeken die rechtstreeks bij de bronserver binnenkwamen, kregen van nginx meteen het HTML-bestand dat WP Rocket had gemaakt, en gingen niet door tot PHP en de database.

Ⅰ. Opbouw van de WordPress-cache

In de informatica is een cache een techniek om gegevens tijdelijk op te slaan zodat ze snel toegankelijk zijn; op het web werkt het volgens hetzelfde principe en draagt het flink bij aan betere prestaties.

Doordat caching gegevens bewaart, hoeft er niet bij elk bezoek aan een website alles opnieuw bij de server te worden opgevraagd: opgeslagen gegevens worden snel geladen en de laadtijd van de pagina daalt. Zo vermindert de serverbelasting en verbetert de gebruikerservaring.

De caches die bij WordPress-verzoeken worden gebruikt, vallen in twee groepen uiteen: websitecache en servercache. De HTTP-cachingstandaard, zoals MDN die beschrijft, noemt een cache die alleen in de browser van één bezoeker staat een private cache, en CDN- en proxycaches die veel bezoekers delen een shared cache; in dit artikel vallen die twee samen onder websitecache.

Paginacache, OPcache en objectcache zijn caches die meedraaien in het proces waarin WordPress op de server wordt uitgevoerd. De HTTP-standaard heeft er geen eigen categorie voor; de officiële WordPress-documentatie deelt ze in als cachingplugins (paginacache), objectcache en servercache (opcode-caches zoals OPcache).

🗂️ Caches die een WordPress-verzoek passeert
🌐 WebsitecacheHTTP-cache · indeling van MDN
private cacheBrowsercache
shared cache
proxy cacheProxy's in bedrijfs- en providernetwerken
managed cacheCDN · reverse proxy (Varnish)
🖥️ ServercacheIndeling van de officiële WordPress-documentatie
PaginacacheStatische HTML gemaakt door een cachingplugin (WP Rocket)
OPcacheOpcode-cache · PHP-uitvoering
ObjectcacheGegevens die na het verzoek blijven bestaan (Redis)

Alle toepassingsgebieden van caching staan in het artikel Cache: definitie en alle toepassingsgebieden van caching en de vier takken van prestatieoptimalisatie, caching inbegrepen, worden in het artikel Webprestatie-optimalisatie: opbouw en definitie uitgelegd.

Kies in de simulator hieronder een cache in de boom links en klik op een knop: je ziet dan op welke laag het verzoek stopt. De laag die WordPress-beheerders met een cachingplugin als eerste aanzetten, is de paginacache.

🧭 Simulator van de cachelagenUitlegsimulator
🗂️ Caches die een WordPress-verzoek passeert
🧰 Soort verzoek
Browsercache
De HTTP-cache die in de browser van de bezoeker wordt opgeslagen. Kies [Afbeelding · CSS] en klik op [Eerste bezoek] → [Herhaalbezoek]: vanaf de tweede keer gaat er geen verzoek meer naar de server.
HTTP-cacheheaders
De regels waarmee de server browsers en CDN's laat weten hoelang ze iets mogen bewaren. De headerregels in het responslogboek zijn echte waarden van een server met Nginx + Apache.
CDN · proxycache
Een kopie die veel bezoekers delen. Zet [CDN gebruiken] aan en klik op [Eerste bezoek] → [Herhaalbezoek]: het antwoord komt dan al van de edge.
Paginacache
Slaat de HTML die PHP heeft gemaakt op als bestand. Klik op [Herhaalbezoek] en het verzoek gaat niet meer door tot PHP en de database.
OPcache
Houdt gecompileerde PHP-bytecode in het geheugen. Bij [Bezoek na bewerken] draait PHP opnieuw, maar het compileren wordt overgeslagen.
Objectcache
Slaat queryresultaten op in Redis. Bij [Bezoek na bewerken] worden alleen de gewijzigde berichtgegevens opnieuw uit MariaDB gelezen.
Volledige stroom
Een verzoek gaat van boven naar beneden en stopt bij de eerste laag die een kopie heeft.
LaagOpslaglocatieWat het opslaatVoorbeeld met Nginx + Apache
BrowsercacheApparaat van de bezoekerHTML · CSS · JS · afbeeldingen · lettertypenCSS · afbeeldingen 7 dagen
CDN · proxycacheVóór de server (edge · reverse proxy)Kopieën van pagina's · statische bestandenBunny CDN
PaginacacheSchijf · geheugen van de serverDoor PHP gemaakte HTMLWP Rocket + nginx
OPcacheServergeheugenPHP-bytecodePHP 8.3, JIT uit
ObjectcacheServergeheugenQueryresultaten · objectenRedis
Een uitlegsimulator die alleen in je browser draait. De headerregels in het responslogboek zijn op 10 oktober 2026 ontvangen van een server met Nginx + Apache; waarden tussen haakjes, zoals de ETag na bewerken, zijn voorbeelden.

Ⅱ. Websitecache

Websitecache is de cache waarbij de server via responsheaders aangeeft hoe iets bewaard moet worden, waarna de browser van de bezoeker en CDN's of proxy's volgens die aanwijzing een kopie opslaan. Typische headers zijn [Cache-Control], [ETag] en [Expires]; is de bewaartermijn voorbij, dan wordt met een voorwaardelijk verzoek ([304 Not Modified]) gecontroleerd of er iets is veranderd.

1️⃣ Browsercache

Browsercache is de HTTP-cache in de webbrowser van de bezoeker. Die bewaart HTML, CSS, JavaScript, afbeeldingen en lettertypen, en als dezelfde bron opnieuw wordt opgevraagd, gaat het verzoek niet naar de server of wordt alleen gecontroleerd of er iets is veranderd.

De bewaartermijn bepaalt de server, niet de bezoeker. De Nginx + Apache-server hieronder geeft CSS en afbeeldingen 7 dagen mee en beantwoordt HTML-pagina's zonder termijn, zodat ze bij elk nieuw bezoek opnieuw worden gecontroleerd.

📨 Gemeten responsheadersConfiguratie Nginx + Apache · 2026-10-10
💻 Computer van de bezoekerBrowsercache
──────▶① Eerste verzoekGET /style.css
🖥️ WebserverNginx + Apache
💻 Computer van de bezoekerBrowsercache
◀──────② Bestand + bewaaraanwijzingcache-control: max-age=604800
🖥️ WebserverNginx + Apache
③ De browser bewaart het bestand volgens de aanwijzing 7 dagen en stuurt bij bezoeken in die periode geen verzoek naar de server.
💻 Computer van de bezoekerBrowsercache
──────▶④ Controle na afloop van de termijnIf-None-Match: "6ab12775-2ee8"
🖥️ WebserverNginx + Apache
💻 Computer van de bezoekerBrowsercache
◀──────⑤ Niet gewijzigdHTTP/2 304 (zonder body)
🖥️ WebserverNginx + Apache
🖼️ CSS · afbeeldingen
cache-control: max-age=604800
expires: Sat, 17 Oct 2026 03:21:00 GMT
etag: "6ab12775-2ee8"
In de browser is het 7 dagen lang mogelijk de opgeslagen kopie te gebruiken zonder de server opnieuw te vragen.
📄 HTML-pagina
etag: "6ac9298c-95575"
last-modified: Fri, 09 Oct 2026 17:51:08 GMT
Er is geen bewaartermijn opgegeven, dus bij een nieuw bezoek vraagt de browser eerst met de ETag of er iets is veranderd.
Wordt opnieuw gevraagd met dezelfde ETag, dan stuurt de server zonder body alleen [HTTP/2 304] terug, en de browser blijft de opgeslagen kopie gebruiken.

2️⃣ CDN · proxycache

CDN- en proxycaches zitten tussen bezoekers en de bronserver en worden door veel bezoekers gedeeld. Een forward proxy staat vooraan aan de kant van de bezoeker, zoals in een bedrijfsnetwerk; reverse proxy's en CDN's staan vóór de server en antwoorden in plaats van de bronserver met een opgeslagen kopie.

Een typische reverse proxy is Varnish Cache, en CDN's zoals Bunny CDN en Akamai volgen dezelfde opbouw. Met DNS per regio kun je bezoekers in de regio van de bronserver rechtstreeks met de bronserver verbinden, terwijl bezoekers uit andere regio's antwoord krijgen van een nabije CDN-edge (bijv. Bunny CDN) die zelfs de HTML opslaat.

👤 Bezoeker in de regio van de bronserverDNS geeft het adres van de bron
→
🖥️ BronserverAntwoordt direct, zonder via het CDN te gaan.
👤 Bezoeker in een andere regioDNS geeft het adres van een nabije edge
→
☁️ Bunny CDN-edgeHeeft het een kopie van de HTML of het bestand, dan antwoordt het hier.
→
🖥️ BronserverWordt alleen bereikt als de edge geen kopie heeft.

De opbouw en de voordelen van een CDN worden in het artikel Wat is een CDN? Redenen om een CDN te gebruiken en 5 voordelen uitgelegd.

Ⅲ. Servercache

Servercache is de cache die meedraait in het proces waarin WordPress een pagina bouwt nadat het verzoek bij de bronserver is aangekomen. Een server met Nginx + Apache verwerkt verzoeken in de volgorde hieronder; vindt een eerdere stap een kopie, dan worden de latere stappen overgeslagen.

🅐 Als de paginacache het bestand heeftDe meeste paginaverzoeken van niet-ingelogde bezoekers
① nginx ontvangt het verzoekDe webserver ontvangt het verzoek dat bij de bronserver is aangekomen.
↓
1️⃣ Paginacache ↓② Antwoord met het paginacachebestandnginx stuurt het HTML-bestand dat WP Rocket heeft gemaakt ongewijzigd door.x-rocket-nginx-serving-file: HIT
Het eindigt zonder langs PHP · OPcache · Redis · MariaDB te gaan.
🅑 Als de paginacache het bestand niet heeftEerste bezoek direct na het legen van de cache · inlogscherm · AJAX-verzoeken
① nginx ontvangt het verzoekEr is geen bestand, dus het verzoek gaat door naar Apache.
↓
2️⃣ OPcache ↓② PHP draait · OPcacheVoert de PHP-bestanden van WordPress uit als gecompileerde bytecode.
↓
3️⃣ Objectcache ↓③ Objectcache (Redis)Opgeslagen queryresultaten en objecten komen uit Redis.
↓
④ MariaDBVraagt alleen gegevens op die niet in Redis staan en leest vaak gebruikte gegevens uit de InnoDB-bufferpool (geheugen).
↓
⑤ Antwoord · opslaan in de paginacacheDe afgewerkte HTML wordt verstuurd en WP Rocket slaat die op als bestand, zodat het volgende verzoek via 🅐 loopt.
Gebaseerd op Nginx + Apache (alleen zonder paginacachebestand door naar Apache en PHP), gecontroleerd op 2026-10-10.

Bij Cloudways en ScalaHosting kun je Nginx + Apache als optie kiezen. Bij Cloudways kies je per applicatie de Hybrid stack (Nginx + Apache) of de Lightning stack (alleen Nginx), en bij ScalaHosting zet je in SPanel een instelling aan die Nginx vóór Apache plaatst.

🖥️ Hosting waar je Nginx + Apache kunt kiezen
CloudwaysStackkeuze per applicatie
Hybrid stackNginx + Apache
Lightning stackAlleen Nginx
Cloudways →
ScalaHostingWebserverinstellingen in SPanel
StandaardApache
Nginx aanzettenNginx + Apache
ScalaHosting →
CacheWat het opslaatWanneer het wordt opgeslagen
1️⃣ PaginacacheAfgewerkte HTML-pagina🅑 ⑤ Bij het antwoord slaat WP Rocket het op als bestand
2️⃣ OPcacheGecompileerde PHP-code (bytecode)🅑 ② Als een PHP-bestand voor het eerst draait
3️⃣ ObjectcacheStukjes data zoals queryresultaten en opties🅑 ③ Als WordPress de gegevens voor het eerst ophaalt

1️⃣ Paginacache

  • ↪️ Full-page cache of HTML-cache

Paginacache heet ook full-page cache, en omdat het HTML opslaat, wordt het soms HTML-cache genoemd. De volledige webpagina die PHP heeft gemaakt, wordt als statisch HTML-bestand bewaard, en bij een verzoek voor dezelfde pagina wordt dat bestand verstuurd zonder PHP uit te voeren. Dit is geval 🅐 in de verwerkingsvolgorde hierboven.

Hij wordt bewaard in het servergeheugen (RAM) of op schijf (HDD/SSD): geheugen is snel maar duur en beperkt in omvang, schijf heeft ruimte genoeg maar is relatief traag.

TypeVoorbeeldHoe het opslaat en antwoordt
CachingpluginWP Rocket · WP Super Cache · W3 Total Cache · Cache EnablerWordPress slaat de pagina op als HTML-bestand en de webserver verstuurt dat bestand.
WebservercacheNginx FastCGI-cache · LiteSpeed CacheDe webserver slaat het PHP-antwoord zelf op en verstuurt het bij het volgende verzoek.
Reverse-proxycacheVarnishEen cacheserver vóór de webserver slaat de pagina op en antwoordt.

Bij Nginx + Apache leest nginx het HTML-bestand van WP Rocket zelf en verstuurt het, en in de responsheader staat dan [x-rocket-nginx-serving-file: HIT]. Hoe je de paginacache met WP Rocket aanzet en instelt, wordt in het artikel WP Rocket instellen uitgelegd.

2️⃣ OPcache

OPcache slaat PHP-code die vooraf tot bytecode is gecompileerd op in het geheugen, zodat hetzelfde bestand bij een volgende uitvoering niet opnieuw door de PHP-parser hoeft. Het zit standaard in PHP sinds 5.5; APC en XCache, die vroeger werden gebruikt, ondersteunen PHP 7 niet en worden niet meer gebruikt. Dit is stap ② van 🅑 in de verwerkingsvolgorde hierboven.

TypeStatusUitleg
Zend OPcacheStandaard ingebouwd sinds PHP 5.5De standaard-opcodecache van nu; aanzetten met [opcache.enable=1].
OPcache JITSinds PHP 8 onderdeel van OPcacheZet bytecode nog een keer om naar machinecode en voert die uit; aan- en uitzetten met [opcache.jit].
APCOntwikkeling gestoptDe opcode-cache van vóór OPcache; de functie voor datacache leeft voort in APCu.
XCacheOntwikkeling gestoptOndersteunt PHP 7 niet.
WinCacheVoor Windows-servers (IIS)Een opcode-cache die de officiële WordPress-documentatie naast OPcache noemt.

OPcache zet je aan met de PHP-instelling [opcache.enable=1], en de JIT die met PHP 8 is gekomen, kun je apart uitzetten met [opcache.jit=disable]. Installatie en configuratie worden in het artikel Zend OPcache: begrip, installatie en configuratie uitgelegd.

3️⃣ Objectcache

Objectcache slaat resultaten van databasequery's of berekende objecten op in een geheugenopslag zoals Redis of Memcached. Standaard onthoudt WordPress objecten alleen binnen één verzoek; pas als je een opslag zoals Redis koppelt, blijven de resultaten ook na afloop van het verzoek bestaan. Dit is stap ③ van 🅑 in de verwerkingsvolgorde hierboven.

TypeSoortBlijft na het verzoek bestaan?Uitleg
WP_Object_CacheStandaard in WordPressNeeIngebouwde cache die alleen binnen één verzoek onthoudt.
RedisObjectcacheJaEen aparte geheugenopslag, gekoppeld via de drop-in van de plugin Redis Object Cache.
MemcachedObjectcacheJaEen aparte geheugenopslag.
APCuObjectcacheJa (binnen dezelfde server)Slaat op in het gedeelde geheugen dat PHP gebruikt.
BestandObjectcacheJaSlaat op als bestanden op schijf.
InnoDB-bufferpoolEigen cache van de database · geen objectcacheJaMySQL en MariaDB houden tabelgegevens en indexen in het geheugen.
QuerycacheEigen cache van de database · geen objectcache—Verwijderd in MySQL 8.0; in MariaDB nog aanwezig, maar standaard uitgeschakeld.

WordPress maakt verbinding met Redis via het drop-in-bestand ([object-cache.php]) dat de plugin Redis Object Cache toevoegt. De installatie wordt in het artikel Redis Cache voor WordPress installeren en instellen uitgelegd.

🔢 FAQ & aanbevolen content

Dan antwoordt een oude kopie die nog in de paginacache of het CDN staat. Leeg de cache van dat bericht in je cachingplugin en, als je een CDN gebruikt, ook de kopie in het CDN.

Paginacacheplugins zoals WP Rocket sturen in de standaardinstellingen geen opgeslagen pagina's naar ingelogde gebruikers. Beheerschermen en pagina's die je ingelogd bekijkt, worden elke keer opnieuw door PHP gemaakt; dan houden OPcache en objectcache de snelheid op peil.

In Chrome laad je met [Ctrl+Shift+R] (op een Mac [Cmd+Shift+R]) de huidige pagina opnieuw zonder cache. De hele opgeslagen cache wis je via [Meer] rechtsboven → [Browsegegevens verwijderen], waar je [Afbeeldingen en bestanden in het cachegeheugen] kiest.

💾 Berichten over cache 10 berichten
🗂️ Cache
📋 Cache: definitie en alle toepassingen 📄 Websitecache & servercache
📋 WP Rocket instellen 📝 Zend OPcache 📝 Redis Cache installeren
📝 Wat is een CDN? 📝 Varnish Cache
📋 WP Rocket-snelheidstest 📝 Voorbeeld van snelheidswinst 📝 Cache- en optimalisatieplugins

ℹ️ Affiliatemelding
De content van deze site bevat affiliatelinks. Koopt een bezoeker via een van deze links een product of dienst, dan ontvangt deze site een commissie van de verkoper. Het bedrag dat de koper betaalt (bij acties gaat het omlaag ↓) wordt daardoor niet hoger. De vermelde prijzen, kortingen en voorraad gelden op het moment van schrijven en kunnen afwijken; controleer ze daarom vóór je aankoop bij de verkoper. Producten worden gekozen en beoordeeld volgens onze eigen criteria, en commissies hebben geen invloed op de volgorde of de inhoud van de beoordelingen.

Geef een reactie

Je e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *

Laat zien dat je geen machine bent: 3   +   4   =