Cache in Joomla
Caching kan de grootste snelheidswinst geven in Joomla, en het is tegelijk de functionaliteit die de meeste mensen verkeerd begrijpen. Zet caching aan en je pagina's kunnen veel sneller laden. Gebruik het onzorgvuldig en bezoekers zien ineens de inhoud van gisteren, de naam van een ingelogde gebruiker in de header van iemand anders, of een winkelwagen die nooit wordt bijwerkt. Het component dat je hier controle over geeft, heet com_cache.
De meeste beheerders kennen com_cache alleen als de knop Cache wissen die ze indrukken wanneer er iets verouderd lijkt te zijn. Maar het component is slechts het zichtbare topje van een veel groter systeem: cacheniveaus, cache-handlers, een paginacache-plugin, caching per module en een ontwikkelaars-API die elke extensie kan gebruiken.
Een kleine backendtool die de cache van Joomla wist, bovenop een cachesysteem dat bepaalt hoe snel je hele site aanvoelt.
Dit artikel legt uit hoe caching in Joomla echt werkt. Het behandelt de basis voor eigenaren en redacteuren, de dagelijkse instellingen voor beheerders en de technische details voor ontwikkelaars: waar de gecachte gegevens staan, welke handler ze opslaat, hoe de API werkt en waarom caching en ingelogde gebruikers niet altijd samengaan.
1. De basis
1.1 Wat is com_cache?
Een Joomla component is een kleine applicatie die binnen Joomla draait. De meeste componenten gaan ergens over: com_content gaat over artikelen, com_users gaat over gebruikers. com_cache gaat over gecachte gegevens - de tijdelijke kopieen die Joomla bewaart zodat het niet bij elk bezoek elke pagina opnieuw hoeft op te bouwen.
Het component zelf is heel klein. Het heeft een taak die in tweeen is gesplitst: je kunt er de cache wissen (de opgeslagen kopieen verwijderen) en de verlopen cache opschonen (alleen de kopieen verwijderen die over hun houdbaarheidsdatum heen zijn). Het component maakt de cache niet zelf aan - de rest van Joomla doet dat. com_cache is het schoonmaakscherm.
1.2 Wat is een cache eigenlijk?
Cache is een opgeslagen antwoord. De eerste keer dat een bezoeker een pagina opent, doet Joomla al het werk: het vraagt de database uit, bouwt de artikelen op, rendert de modules en stelt de HTML samen. Met caching aan bewaart Joomla ook een kopie van het resultaat. De volgende bezoeker die om dezelfde pagina vraagt, krijgt het opgeslagen kopie terug en slaat het meeste werk over.
Caching ruilt actualiteit in voor snelheid: je levert een iets oudere kopie zodat je hem veel sneller kunt leveren.
Die afweging is het hele verhaal. Al het andere in dit artikel gaat over het beheersen van hoe oud de kopie mag worden en welke delen van de site uit een kopie geleverd mogen worden.
1.3 Waarom het belangrijk is
Caching raakt de twee dingen waar elke site-eigenaar om geeft:
- Snelheid. Een gecachte pagina slaat databasequery's en rendering over. Op een drukke site is dit het verschil tussen een snelle en een trage pagina.
- Serverbelasting. Minder query's per bezoek betekent dat de server veel meer bezoekers aankan voordat hij het moeilijk krijgt.
De prijs is veroudering. Als je een nieuw artikel publiceert en de homepage is 15 minuten gecacht, verschijnt het nieuwe artikel mogelijk pas na maximaal 15 minuten. Weten hoe je de cache wist - en hoe lang die meegaat - hoort bij het goed beheren van een Joomla-site.
1.4 Waar je het vindt
In de Joomla backend zijn er twee opties, beide onder het menu Systeem:
Systeem -> Onderhoud -> Cache wissen
Systeem -> Onderhoud -> Verlopen cache wissen
Beide openen hetzelfde component, com_cache, in twee verschillende weergaven. De instellingen die bepalen hoe caching zich gedraagt staan ergens anders, in de Globale configuratie (paragraaf 6).
2. De twee taken van de cachecomponent
2.1 Cache wissen
Het scherm Cache wissen toont elke cachegroep die op dit moment gegevens bevat, met het aantal bestanden en de totale grootte:
| Kolom | Betekenis |
|---|---|
| Cachegroep | De naam van de groep, meestal een component, bijv. com_content. |
| Aantal bestanden | Hoeveel gecachte items de groep bevat. |
| Grootte | Hoeveel schijfruimte (of geheugen) de groep gebruikt. |
Je kunt een of meer groepen aanvinken en op Verwijderen drukken, of op Alles verwijderen om alles te wissen. Het wissen van een groep verwijdert alle items, net aangemaakt of niet. Dit is de knop die je gebruikt na een themawijziging, een template-update, of telkens wanneer de site iets toont waarvan je weet dat je het al hebt gewijzigd.
2.2 Verlopen cache wissen
Het scherm Verlopen cache wissen (het model noemt dit purge) is milder. Het verwijdert alleen de items waarvan de cachetijd al is verstreken. Items die nog binnen hun levensduur vallen, blijven bewaard. Dit kun je op elk moment veilig uitvoeren, omdat het nooit een kopie weggooit die Joomla nog zou tonen.
Verlopen items worden niet op het moment van verlopen verwijderd. Ze blijven op schijf staan totdat iets ze verwijdert: een purge, een volledige wis-actie of een nieuw verzoek dat ze overschrijft. Op een langdraaiende site kan de cachemap vollopen met duizenden verlopen bestanden. Een geplande purge houdt het netjes.
2.3 Wissen versus purgen - welke gebruik je?
| Actie | Verwijdert | Gebruik wanneer |
|---|---|---|
| Cache wissen (een groep) | Alles in die groep | Een component toont verouderde inhoud. |
| Cache wissen (Alles verwijderen) | Alles, elke groep | Na updates, template- of override-wijzigingen, debuggen. |
| Verlopen cache wissen | Alleen items voorbij hun cachetijd | Routineonderhoud; veilig schoonmaken. |
3. Hoe caching in Joomla werkt
3.1 De levenscyclus van de cache
Elk gecacht item volgt dezelfde eenvoudige cyclus:
1. Er komt een verzoek binnen.
2. Joomla bouwt er een cache-ID voor (een hash van de relevante invoer).
3. Bestaat er een opgeslagen item voor dat ID, en valt het nog binnen de cachetijd?
JA -> geef de opgeslagen kopie terug. Klaar. (een cache-"hit")
NEE -> doe het echte werk, sla het resultaat op, geef het terug. (een cache-"miss")
Het cache-ID is het kernidee. Joomla bouwt het op uit de dingen die de uitvoer anders zouden moeten maken - de option, de view, het Item-ID, de taal, de toegangsgroepen van de gebruiker, enzovoort. Twee verzoeken met dezelfde invoer krijgen hetzelfde ID en dus dezelfde kopie.
3.2 Cachegroepen
Items worden geordend in groepen, vrijwel altijd genoemd naar de component die ze heeft aangemaakt: com_content, com_modules, com_plugins, plus een paar interne zoals _system en com_templates. De groep is wat je op het scherm Cache wissen ziet en aanvinkt. Door het groeperen kun je de cache van een component wissen zonder de rest aan te raken.
3.3 Waar de cache staat
Met de standaard File-handler zijn gecachte items gewone bestanden in twee mappen:
cache/ (de cache van de site / frontend)
administrator/cache/ (de cache van de backend)
Daarbinnen krijgt elke groep zijn eigen submap, en elk item is een .php-bestand met het cache-ID als naam. Het bestand begint met een die-regel zodat het niet rechtstreeks via het web gelezen kan worden. Je kunt de inhoud van deze mappen veilig met de hand verwijderen als de backend onbereikbaar is - dat is hetzelfde als een volledige Cache wissen.
3.4 Welke tabellen de cache voeden
Een punt dat ontwikkelaars verrast: com_cache heeft geen eigen databasetabel. De cache bestaat uit bestanden of geheugen, nooit uit rijen. Wat het opslaat is echter het gerenderde resultaat van gewone query's. Wanneer een view of pagina wordt gecacht, is dat opgebouwd uit inhoudstabellen zoals:
#__content Artikelen
#__categories Categorieen
#__modules Module-inhoud en paginatoewijzingen
#__menu Menu-items (bepalen via Itemid het cache-ID)
#__extensions Component- en plugininstellingen
#__session Inlogstatus (bepaalt caching voor gast vs ingelogd)
De cachelaag zit tussen deze tabellen en het antwoord in: bij een hit slaat Joomla de query's hierop volledig over.
Naar boven4. Cacheniveaus: Uit, Conservatief, Progressief
De Globale configuratie biedt drie cacheniveaus. Ze komen overeen met de waarden 0, 1 en 2 van de instelling caching.
4.1 Uit (0)
Geen caching van views of modules. Joomla bouwt bij elk verzoek alles opnieuw op. Dit is de juiste instelling tijdens ontwikkelen of debuggen, en de verkeerde voor een drukke productiesite.
4.2 Conservatief (1)
De aanbevolen standaard. Joomla cacht de uitvoer van componentviews en modules, zorgvuldig zo gesleuteld dat verschillende pagina's en verschillende toegangsniveaus verschillende kopieen krijgen. Het is "conservatief" omdat het cache-ID genoeg context bevat om te voorkomen dat de inhoud van de ene pagina op een andere wordt geleverd. Dit is de veilige keuze voor vrijwel elke site.
4.3 Progressief (2)
Progressieve caching is agressiever: het cacht module-uitvoer breder en hergebruikt die over pagina's heen. Op papier is het sneller. In de praktijk is het de klassieke oorzaak van "de verkeerde module verschijnt op de verkeerde pagina", omdat een module die per pagina zou moeten veranderen uit een enkele gecachte kopie wordt geleverd. Vermijd Progressief tenzij je het zorgvuldig hebt getest en je modules werkelijk overal identiek zijn.
Naar bovenVuistregel: begin met Conservatief. Grijp alleen naar Progressief als je een echte behoefte hebt gemeten en hebt bevestigd dat er niets stukgaat.
5. Cache-handlers: waar items worden opgeslagen
De cache-handler bepaalt het opslagmedium. Joomla 6 levert er vier:
| Handler | Slaat op in | Goed voor |
|---|---|---|
file |
Bestanden in cache/ |
De standaard. Werkt overal, geen extra software. |
apcu |
PHP-gedeeld geheugen (APCu) | Een server; zeer snel voor kleine items. |
memcached |
Een Memcached-server | Meerdere webnodes die een cache delen. |
redis |
Een Redis-server | Meerdere nodes; persistentie en rijkere functies. |
Oudere Joomla-versies boden ook XCache, eAccelerator, WinCache en een gewone database-handler. Die zijn in modern Joomla verdwenen - reken er niet op.
5.1 Een handler kiezen
- File is prima voor de meeste kleine en middelgrote sites. De enige echte zwakte is veel kleine bestanden op trage schijven.
- APCu is de gemakkelijke winst op een enkele server: het houdt items in het geheugen, dus er is geen schijf-I/O. Het overleeft een PHP-herstart niet en wordt niet tussen servers gedeeld.
- Memcached of Redis zijn het juiste antwoord voor load-balanced clusters, omdat elke webnode dezelfde gedeelde cache leest en schrijft. Redis voegt optionele persistentie toe en is de gangbare moderne keuze.
5.2 Platformspecifieke caching
De optie Platformspecifieke caching (de instelling cache_platformprefix) voegt het browser-/apparaattype toe aan het cache-ID. Zet dit alleen aan als je vanaf dezelfde URL echt verschillende HTML aan desktop en mobiel levert. Voor een responsief template dat dezelfde HTML naar elk apparaat stuurt, laat je het uit - aanzetten verdubbelt simpelweg het aantal gecachte kopieen zonder voordeel.
6. Cache-instellingen in de Globale configuratie
Alle knoppen staan op Systeem -> Globale configuratie -> Systeem -> Cache-instellingen. Ze worden opgeslagen in configuration.php (niet in de database), zodat een ontwikkelaar ze rechtstreeks kan uitlezen.
| Veld | Sleutel | Betekenis |
|---|---|---|
| Systeemcache | caching |
0 Uit, 1 Conservatief, 2 Progressief. |
| Cache-handler | cache_handler |
file, apcu, memcached of redis. |
| Platformspecifieke caching | cache_platformprefix |
Apparaattype toevoegen aan het cache-ID. |
| Cachetijd | cachetime |
Hoe lang een item vers blijft, in minuten (standaard 15). |
| Pad naar cachemap | cache_path |
Optioneel eigen pad; leeg betekent de standaard cache/. |
6.1 Cachetijd is in minuten
De standaard Cachetijd is 15 minuten. Daarna geldt een item als verlopen en bouwt het volgende verzoek het opnieuw op. Verlaag het (bijvoorbeeld naar 5) als je inhoud vaak verandert en een korte vertraging telt; verhoog het (bijvoorbeeld naar 60) voor een grotendeels statische brochuresite waar snelheid belangrijker is dan versheid.
6.2 Caching aan betekent niet dat pagina's gecacht zijn
Dit verrast mensen: Systeemcache op Conservatief zetten cacht componentviews en modules, maar het cacht op zichzelf niet de hele HTML-pagina. Volledige paginacaching is een aparte functie, de plugin Systeem - Paginacache, die hierna wordt behandeld. De twee worden vaak samen gebruikt.
Naar boven7. De Paginacache-plugin
7.1 Wat het doet
De plugin Systeem - Paginacache (plg_system_cache) cacht de volledige gerenderde HTML-pagina. Bij een hit geeft Joomla de opgeslagen pagina terug nog bijna voordat de applicatie volledig is opgestart - dit is de snelste cache die Joomla heeft.
Activeer hem op Systeem -> Beheren -> Plug-ins, zoek naar Systeem - Paginacache en zet hem aan. Hij gebruikt dezelfde handler en cachetijd als de globale instellingen.
7.2 Alleen gasten
De belangrijkste regel: de paginacache bedient alleen uitgelogde (gast)bezoekers. Zodra een gebruiker inlogt, stapt de plugin opzij en levert een vers opgebouwde pagina. Dit is opzettelijk - een volledige paginacache kan niet veilig een opgeslagen pagina delen tussen een gast en een ingelogde gebruiker, of tussen twee verschillende ingelogde gebruikers, omdat de pagina persoonlijke gegevens bevat zoals hun naam of winkelwagen.
7.3 De plugin-opties
| Optie | Wat het regelt |
|---|---|
| Browsercaching gebruiken | Stuurt cache-headers zodat de browser de pagina kan hergebruiken en Joomla met een 304 "Not Modified" kan antwoorden. Krachtig maar bot - gebruik met zorg. |
| Uitgesloten menu-items | Menu-items die nooit paginagecacht mogen worden (bijvoorbeeld een contactformulier). |
| URL's uitsluiten | Een lijst met URL-patronen om over te slaan. Gebruik dit voor dynamische pagina's. |
Browsercaching gebruiken verdient een waarschuwing: zodra de browser van een bezoeker de pagina vasthoudt, kan je server hem niet vertellen te verversen tot de tijd is verstreken. Laat het uit tenzij je de gevolgen begrijpt.
7.4 Wat uit te sluiten
Sluit altijd pagina's uit die live of persoonlijk moeten zijn: contactformulieren, zoekresultaten, inloggen en registreren, winkelwagens en afrekenen, en elke pagina met een token per bezoeker. Het paginacachen daarvan leidt tot ingediende formulieren die "niets doen" of verouderde tokens die de beveiligingscontroles niet doorstaan.
Naar boven8. Caching van modules
8.1 Beheer per module
Elke module heeft eigen cache-instellingen op het tabblad Geavanceerd:
- Caching - Globaal gebruiken (de globale instelling volgen) of Geen caching (deze module nooit cachen).
- Cachetijd - een optionele levensduur per module die de globale cachetijd overschrijft.
Zet een module op Geen caching wanneer de inhoud altijd live moet zijn: een "ingelogd als"-begroeting, een willekeurige quote, een live teller, of iets dat bij elke weergave moet verschillen. Laat de rest op Globaal gebruiken staan.
8.2 De cachemodus van een module
Achter de schermen kan een module een cachemodus registreren die Joomla vertelt wat de uitvoer uniek maakt. De gangbare modi zijn:
| Modus | Een gecachte kopie per... |
|---|---|
static |
Module (overal dezelfde uitvoer). |
itemid |
Menu-item (uitvoer verandert per pagina). |
safeuri |
Een gekozen set URL-parameters. |
id |
Een eigen sleutel die de module aanlevert. |
Dit is waarom een slecht geschreven module dezelfde inhoud op elke pagina kan tonen, zelfs met "correct" geconfigureerde caching: hij gaf static op terwijl hij per menu-item zou moeten varieren. De instelling zit in de code van de module, niet in de backend.
9. Onder de motorkap: de caching-API
Caching is voor elke extensie beschikbaar via een kleine, consistente API. Er zijn vier cache-controllers, elk geschikt voor een ander soort gegevens.
| Controller | Cacht |
|---|---|
output |
Een blok gegenereerde HTML of tekst. |
callback |
De retourwaarde van een functie of methode. |
view |
De volledige uitvoer van een MVC-view. |
page |
Een hele pagina (gebruikt door de paginacache-plugin). |
9.1 De callback-cache (meest bruikbaar)
De callback-controller is het dagelijkse gereedschap. Je geeft hem een functie en zijn argumenten; hij voert de functie uit bij een miss, slaat het resultaat op en geeft bij een hit de opgeslagen waarde terug. De moderne manier om een controller te krijgen is via de cache controller factory:
use Joomla\CMS\Cache\CacheControllerFactoryInterface;
use Joomla\CMS\Factory;
$cache = Factory::getContainer()
->get(CacheControllerFactoryInterface::class)
->createCacheController('callback', ['defaultgroup' => 'com_myext']);
$data = $cache->get(
function ($id) {
// Het dure werk draait alleen bij een cache-miss.
return MyHelper::loadExpensiveData($id);
},
[42], // argumenten die aan de callback worden doorgegeven
'item-42' // een optioneel cache-ID
);
De oudere sneltoegang werkt nog steeds en komt veel voor in bestaande code:
use Joomla\CMS\Factory;
$cache = Factory::getCache('com_myext', 'callback');
$data = $cache->get([MyHelper::class, 'loadExpensiveData'], [42]);
9.2 De output-cache
Wanneer je al een string HTML hebt opgebouwd en die alleen wilt opslaan:
$cache = Factory::getCache('com_myext', 'output');
$id = 'sidebar-' . $itemId;
if ($html = $cache->get($id)) {
echo $html; // cache-hit
} else {
$html = buildSidebar($itemId);
$cache->store($html, $id);
echo $html; // cache-miss, nu opgeslagen
}
9.3 Kies een goed cache-ID en groep
Twee regels houden gecachte gegevens correct:
- Stop alles wat het resultaat verandert in het cache-ID (het item-ID, de taal, het toegangsniveau van de gebruiker indien relevant). Vergeet je er een, dan lever je de verkeerde kopie.
- Gebruik je componentnaam als de groep zodat beheerders jouw cache afzonderlijk kunnen wissen vanaf het scherm Cache wissen.
10. De cache wissen in code
10.1 De gebeurtenis onContentCleanCache
Wanneer inhoud verandert - een artikel wordt opgeslagen, een module wordt bewerkt - vuurt Joomla onContentCleanCache af zodat gerelateerde caches kunnen worden geleegd. Kernmodellen roepen dit automatisch aan na een opslagactie, en daarom wist het bewerken van een artikel meestal de verouderde pagina zonder dat je iets indrukt.
In je eigen model kun je dezelfde opschoning activeren door de overgeerfde methode cleanCache() aan te roepen, met de naam van de te wissen groep:
// Binnen een model dat Joomla's BaseDatabaseModel uitbreidt
$this->cleanCache('com_myext');
Een subscriber kan ook naar de gebeurtenis luisteren om een eigen extra groep te wissen:
use Joomla\CMS\Event\Model\AfterCleanCacheEvent;
public function onContentCleanCache(AfterCleanCacheEvent $event): void
{
// Leeg een gerelateerde cache wanneer kerninhoud verandert.
}
10.2 De gebeurtenis onAfterPurge
Wanneer een beheerder Verlopen cache wissen uitvoert, vuurt de component onAfterPurge af (gebeurtenisklasse Joomla\CMS\Event\Cache\AfterPurgeEvent). Gebruik dit voor een audittrail, of om tegelijk een eigen opslag te purgen.
10.3 De cache wissen vanaf de CLI
De console-applicatie van Joomla kan de cache zonder browser wissen, wat ideaal is voor deploy-scripts en cron:
# Wis de hele cache
php cli/joomla.php cache:clean
# Wis alleen verlopen items (de purge-actie)
php cli/joomla.php cache:clean expired
Voer een volledige cache:clean uit als laatste stap van elke deployment, zodat bezoekers nooit een mix van oude en nieuwe bestanden zien.
11. Caching, ingelogde gebruikers en personalisatie
Het lastigste deel van caching is het prive houden van persoonlijke inhoud. Joomla regelt dit in twee lagen.
11.1 Het toegangsniveau zit in het cache-ID
Conservatieve caching neemt de toegangsniveaus van de gebruiker op in het cache-ID. Een gast en een geregistreerde gebruiker krijgen daarom verschillende gecachte kopieen van een view, zodat een gast nooit inhoud ontvangt die alleen voor leden bedoeld is. Dit gebeurt automatisch en correct, zolang je eigen code dezelfde regel volgt bij het opbouwen van een cache-ID.
11.2 De paginacache blijft weg bij ingelogde gebruikers
Zoals paragraaf 7 uitlegde, bedient volledige paginacaching alleen gasten. Dit is het eenvoudigste veilige beleid: alles wat persoonlijk is gebeurt op een vers opgebouwde pagina. De afweging is dat ingelogde gebruikers minder voordeel van caching hebben - wat meestal prima is, omdat het meeste verkeer op een openbare site anoniem is.
11.3 De klassieke personalisatiebug
De grootste cachebug is een persoonlijke waarde die in een gedeelde cache wordt gebakken: een "Welkom, Peter"-begroeting die gecacht en aan iedereen getoond wordt, of een token per gebruiker dat in een formulier wordt gecacht. De oplossing is altijd een van drie dingen: zet die module op Geen caching, sluit die pagina uit van de paginacache, of voeg het gebruikers-ID toe aan het cache-ID zodat elke gebruiker zijn eigen kopie krijgt.
Naar boven12. Webservices, headless en clusters
12.1 Geen REST-endpoint voor de cache
Anders dan inhoudscomponenten stelt com_cache bewust geen Webservices-route beschikbaar onder /api/index.php/v1/. Het wissen van de cache van een site is een onderhoudsactie, geen gegevens om via een openbare API te lezen of schrijven. Gebruik om dit te automatiseren het CLI-commando uit paragraaf 10.3 binnen je eigen deploy- of cronjob.
12.2 Caching op een load-balanced cluster
De File- en APCu-handlers slaan de cache op op de server die hem heeft aangemaakt. Op een cluster met meerdere webnodes betekent dat dat elke node een eigen kopie heeft, en dat het wissen van de cache op een node die op de andere nodes niet wist. De oplossing is een gedeelde handler - Memcached of Redis - zodat elke node dezelfde cache leest en schrijft en een enkele wis-actie alle nodes raakt.
12.3 Een CDN is ook een cache
Als er een CDN of reverse proxy (Cloudflare, Varnish, NGINX) voor Joomla staat, cacht die ook pagina's - een laag die Joomla niet kan zien of wissen. Wanneer inhoud verouderd lijkt nadat je de cache van Joomla hebt gewist, denk dan aan het CDN: mogelijk moet je dat ook purgen. Gelaagde caches zijn gewoon, en elke laag moet op zijn beurt worden gewist.
Naar boven13. SEO en prestaties
Caching is een van de meest directe SEO opties die je hebt, omdat paginasnelheid een ranking- en gebruikerservaringfactor is.
13.1 Snelheid en Core Web Vitals
Een gecachte pagina bereikt de bezoeker sneller, wat de Time To First Byte verbetert en de Core Web Vitals helpt waar zoekmachines op letten. Voor een inhoudssite met veel gasten is de paginacache-plugin plus Conservatieve caching de goedkoopste betekenisvolle snelheidswinst die er is.
13.2 Cache jezelf niet uit verse inhoud
Lange cachetijden helpen de snelheid maar schaden de versheid. Een nieuwssite die 60 minuten cacht kan oude koppen tonen aan zowel zoekmachinecrawlers als bezoekers. Stem de cachetijd af op hoe vaak je inhoud werkelijk verandert, en wis de cache na het publiceren van iets tijdgevoeligs.
13.3 Caching vervangt de basis niet
Caching laat Joomla de pagina sneller teruggeven, maar het verkleint geen te grote afbeeldingen, verwijdert geen render-blokkerende scripts en repareert geen traag template. Behandel caching als een onderdeel van een prestatieplan, niet als het geheel.
13.4 Cache opwarmen
De eerste bezoeker na een cache-wis betaalt de volle prijs voor het opnieuw opbouwen van elke pagina - een koude cache betekent een trage eerste hit en, op een drukke site, een piek in serverbelasting. Grote sites vermijden dit met cache opwarmen: de cache vooraf opbouwen voordat echte bezoekers arriveren, meestal als laatste stap van een deployment.
Deployment klaar
|
Opwarmscript vraagt de belangrijkste pagina's op
|
Joomla rendert elke pagina en slaat hem op
|
Eerste echte bezoeker krijgt een cache-hit
Een eenvoudige opwarming is een script dat je belangrijkste URL's opvraagt - de homepage, de belangrijkste categorieen, de drukste artikelen - zodat elke pagina is gecacht voordat het verkeer arriveert. Combineer het met de cache:clean bij deployment uit paragraaf 10.3: eerst wissen, dan opwarmen, zodat bezoekers nooit een half-oude site of een koude cache tegenkomen.
14. Veelgemaakte fouten en valkuilen
14.1 Wijzigingen verschijnen niet
Symptoom: Je hebt een artikel, een module of een template bewerkt, maar de site toont nog steeds de oude versie.
Oplossing: Wis de cache op Systeem -> Onderhoud -> Cache wissen (Alles verwijderen). Als het na een tijdje terugkomt, doet je cachetijd gewoon zijn werk - verlaag hem of wis na elke wijziging. Denk eraan dat een CDN ook kan cachen.
14.2 De verkeerde module op de verkeerde pagina
Symptoom: Een module toont inhoud die voor een andere pagina bedoeld is.
Oplossing: Je staat waarschijnlijk op Progressieve caching. Zet Systeemcache op Conservatief, wis de cache en controleer opnieuw.
14.3 Een persoonlijke begroeting getoond aan iedereen
Symptoom: Bezoekers zien de naam van een andere gebruiker, of een ingelogde begroeting terwijl ze uitgelogd zijn.
Oplossing: Zet de gepersonaliseerde module op Geen caching op het tabblad Geavanceerd, en sluit gepersonaliseerde pagina's uit van de paginacache-plugin.
14.4 Formulieren en logins werken niet meer
Symptoom: Een contactformulier, login of afrekenen wordt verzonden en er gebeurt niets, of je krijgt een tokenfout.
Oplossing: De paginacache leverde een verouderde pagina met een oud beveiligingstoken. Voeg die menu-items toe aan de lijst Uitgesloten menu-items of URL's uitsluiten in de paginacache-plugin.
14.5 De cachemap blijft groeien
Symptoom: cache/ vult zich met duizenden oude bestanden en gebruikt veel schijfruimte.
Oplossing: Verlopen items worden niet automatisch verwijderd. Plan cache:clean expired (of voer Verlopen cache wissen uit) regelmatig, of stap over op een in-memory handler zoals Redis.
14.6 Cache "aan" maar de site is nog steeds traag
Symptoom: Je hebt Systeemcache aangezet maar pagina's zijn niet sneller.
Oplossing: Systeemcache alleen cacht geen hele pagina's. Activeer ook de plugin Systeem - Paginacache, en controleer of de trage pagina's niet gepersonaliseerd zijn (en daarom nooit gecacht).
14.7 Snelle diagnosechecks
Wanneer caching zich misdraagt, helpen een paar snelle checks om de schuldige laag te vinden:
- Is het de browser, niet Joomla? Forceer een verse kopie met
Ctrl+F5(een harde verversing) of open de pagina in een prive-venster. Als het daar wel correct is, zat de verouderde kopie in de browser van de bezoeker zelf - vaak een neveneffect van Browsercaching gebruiken in de paginacache-plugin. - Draait Redis eigenlijk wel? Als je de Redis-handler hebt gekozen, controleer dan of de server antwoordt:
Geenredis-cli ping --> PONGPONGbetekent dat Redis onbereikbaar is, en Joomla er niets in kan opslaan. - Verschijnen er cachebestanden? Houd met de File-handler
cache/enadministrator/cache/in de gaten. Nieuwe bestanden bij elke paginaweergave betekenen dat caching werkt; een lege map betekent dat er niets wordt opgeslagen.
15. Best practices
Als je maar een paar dingen uit dit artikel onthoudt, onthoud dan deze:
- Gebruik Conservatieve caching op productie; vermijd Progressief tenzij je het hebt getest.
- Voeg de plugin Systeem - Paginacache toe voor een echte snelheidswinst - deze wordt alleen aan gasten getoond, waardoor het veilig gebruikt kan worden.
- Zet gepersonaliseerde modules op Geen caching, en sluit formulieren, logins en winkelwagens uit van de paginacache.
- Stem Cachetijd af op hoe vaak je inhoud verandert; verlaag het voor nieuws, verhoog het voor brochuresites.
- Wis de hele cache als laatste stap van elke update of deployment, met de knop of
cache:clean. - Gebruik op een cluster Redis of Memcached zodat alle nodes een cache delen.
- Plan Verlopen cache wissen in zodat de cachemap niet onbeperkt groeit.
- Wanneer ontwikkelaars hun eigen gegevens in de cache opslaan, moeten ze elke variabele in de cache-ID opnemen en de componentnaam als groep gebruiken.
16. In het kort
HELE CACHE WISSEN Systeem -> Onderhoud -> Cache wissen -> Alles verwijderen
EEN GROEP WISSEN Systeem -> Onderhoud -> Cache wissen -> groep aanvinken -> Verwijderen
VERLOPEN WISSEN Systeem -> Onderhoud -> Verlopen cache wissen
INSTELLINGEN Systeem -> Globale configuratie -> Systeem -> Cache-instellingen
PAGINACACHE Systeem -> Beheren -> Plug-ins -> Systeem - Paginacache
CACHENIVEAUS 0 Uit 1 Conservatief (gebruik dit) 2 Progressief (riskant)
HANDLERS file (standaard), apcu, memcached, redis
CACHETIJD cachetime, in MINUTEN (standaard 15)
CACHEMAPPEN cache/ en administrator/cache/
CLI
Alles wissen php cli/joomla.php cache:clean
Verlopen wissen php cli/joomla.php cache:clean expired
CODE
Callback-cache Factory::getCache('com_x', 'callback')->get($fn, $args, $id)
Output-cache Factory::getCache('com_x', 'output')->store($html, $id)
Groep opschonen $this->cleanCache('com_x') (binnen een model)
Gebeurtenissen onContentCleanCache (AfterCleanCacheEvent)
onAfterPurge (AfterPurgeEvent)
Naar boven17. Samenvatting
Het cachesysteem van Joomla is de snelste manier om een website vlot te laten werken, en com_cache is het kleine schermpje dat alles in de gaten houdt:
com_cachedoet twee dingen: Cache wissen (opgeslagen kopieen verwijderen) en Verlopen cache wissen (alleen de verouderde verwijderen).- Het gedrag wordt ingesteld in de Globale configuratie: het cacheniveau, de handler, de cachetijd en het pad.
- Conservatieve caching is de veilige standaard; Progressieve ruilt veiligheid in voor snelheid en breekt vaak modules.
- De handler kiest de opslag: File standaard, APCu voor een snelle server, Redis of Memcached voor een cluster.
- De Paginacache-plugin cacht hele pagina's alleen voor gasten - de grootste enkele snelheidswinst, met uitsluitingen voor formulieren en persoonlijke pagina's.
- Ontwikkelaars cachen hun eigen gegevens via de controllers
callbackenoutput, en wissen die metcleanCache()of de gebeurtenisonContentCleanCache.
Zodra je caching ziet als een set lagen - viewcache, modulecache, paginacache en misschien een CDN erbovenop - houden de vreemde "verouderde inhoud"-problemen op mysterieus te zijn. Elke laag heeft een kopie, en elke laag heeft een manier om gewist te worden. Als je site traag is, of inhoud toont waarvan je weet dat je die al hebt gewijzigd, ligt de oorzaak vrijwel altijd in een van deze lagen, en weten hoe Joomla cacht is de snelste manier om die te vinden en veilig af te stemmen.
Naar boven

Joomla specialist en Linux admin voor snelle, veilige en schaalbare websites.


