Het team activeert de volledige paginacache. De TTFB daalt van 800 ms naar 40 ms – overwinning. Behalve dat de banner ‘Hallo beheerder’ verschijnt voor anonieme bezoekers, geeft de winkelwagenteller voor iedereen 0 weer en biedt de A/B-test variant B aan 100% van de gebruikers gedurende zes uur.
Dynamische paginacache is geen schakelaar. Het is een variabiliteitscontract: welke delen van het HTML-antwoord zijn hetzelfde voor welke gebruikerssegmenten, en voor hoe lang. Slecht gedefinieerd versnelt het de site door stille bugs te creëren – erger dan eerlijke traagheid.
Matrix: cachebaar of niet?
| Inhoud | Volledige paginacache? | Alternatief |
|---|---|---|
| Artikel statisch gepubliceerd | Ja (TTL + opschonen) | CDN lange cache |
| Home redactionele lijst | Ja korte TTL | Opschonen om te publiceren |
| Zoekresultaten | Zelden (querytekenreeks) | Gestandaardiseerde sleutelcache |
| Account-/beheerderspagina | Nee | Cache omzeilen |
| Winkelwagen / afrekenen | Nee | geen winkel |
| Realtime aandelenkoers | Nee op shell | AJAX-fragment |
Gulden regel: Als Set-Cookie of Vary: Cookie noodzakelijk is, is de cache aan de paginarand verdacht.
Cachesleutels: wat de antwoorden onderscheidt
Een naïeve URL-sleutel is voldoende voor een blog. Voor een dynamische site combineert u URL, taal, apparaatklasse, A/B-buckettest en authenticatiesegment – niet de gebruikers-ID in de volledige paginasleutel (te veel variaties). Witte lijst met queryparameters. Omzeil cache als sessiecookie aanwezig is.
Strategieën per stapel
WordPress: objectcache plus paginacache, /wp-admin uitsluiting, WooCommerce winkelwagencookies.
Symfony / Laravel: HTTP-kernelcache, Redis-taginvalidatie, ESI voor gebruikersblokkeringen.
Headless: CDN op openbare JSON; nooit op sleutelloze, geverifieerde eindpunten.
nginx fastcgi_cache: fastcgi_cache_bypass en fastcgi_no_cache als sessiecookie.
Invalidatie: vermijd paniek “flush all”
TTL alleen voor niet-kritieke inhoud. URL leegmaken bij wijziging. Tags/surrogaatsleutel voor CMS-bericht. Verbodspatroon in herontwerp van het thema – met voorzichtigheid op de originele foto. Bij publicatie: huis plus taxonomieën plus artikel opschonen.
Zie HTTP-cacheheaders en Varnish: verbonden gebruikers.
CDN plus oorsprong: twee niveaus
Edge-cache verlicht de oorsprong. Consistente Cache-Control headers oorsprong → rand. s-maxage voor CDN, max-age voor browser. Verberg antwoorden niet met Set-Cookie, tenzij edge expliciet is geconfigureerd.
De top: de cache versnelt of liegt — zelden beide zonder ontwerp
Meet de hitratio en het functionele foutpercentage na de cache.
Beslis en ga vooruit zonder blinde vlek
Classificeer URL's eerst als cachebaar, niet-cachebaar of fragment. Stel sleutels in en test met sessie en zonder. Koppel de validering aan de CMS-publicatie. Controleer de oorsprong en CDN-headers (curl -I). Monitor HIT/MISS plus verouderde waarschuwingen buiten de zakelijke TTL. Vergelijk Surrogate-Key-compatibele hosts via de overzicht.
Veelgestelde vragen
Kunnen we een pagina verbergen met een ingelogde gebruiker?
Slaat zelden de hele pagina op in het cachegeheugen. Scheid een openbare cachebare shell en privéblokken die zijn geladen in AJAX of ESI, of definieer strikte sleutels per rol – zonder ooit een ledenpagina aan een anonieme bezoeker te tonen.
Welke TTL-duur voor een nieuwssite?
Voor thuispagina's en lijsten moet u 60 tot 300 seconden wachten met opschonen bij publicatie. Gepubliceerde inhoud kan langer meegaan. Het winkelwagentje en het afrekenen mogen nooit een volledige paginacache doorlopen.
Hoe correct ongeldig maken?
Beheer het opschonen per gebeurtenis: URL-sleutel, tag of surrogaatsleutel bij elke CMS-back-up. Reserveer de global flush voor incidenten waarbij je een belastingpiek op de oorsprong accepteert.
Redis of bestanden voor paginacache?
Bestanden (Varnish, fastcgi_cache nginx) blinken uit voor onbewerkte doorvoer. Redis is geschikt voor fijnmazige ongeldigverklaringen per tag. De meest voorkomende architectuur combineert CDN aan de rand en origin-cache.
Dynamische caching begint met het opsommen van wat vals moet blijven – niet wat snel kan gaan.
