From Joomla! Documentation

This page is a translated version of the page Cache and the translation is 34% complete.

Other languages:
Deutsch • ‎English • ‎español • ‎eesti • ‎فارسی • ‎français • ‎हिन्दी • ‎Nederlands • ‎português

Joomla! propose différentes options de "mise en cache". Voici un aperçu destiné aux administrateurs et développeurs du quoi, où et quand...

Pour les administrateurs

As an administrator, Joomla provides you with the ability to cache parts of your site. You can choose to cache whole web pages or just parts of those pages. This guide explains how.

On a Joomla site web page there are 3 things which may be cached:

  1. The whole page itself – the Page cache
  2. The output from the Joomla component for that web page – known as the View cache
  3. The output from the modules shown on that page – known as the Module cache

You have a number of cache settings which allow you to control what gets cached:

  1. The system plugin "System – Page Cache"
  2. The Global Configuration, System tab, Cache Settings. Here the System Cache option may be set to
    • OFF – Caching disabled
    • ON – Conservative caching
    • ON – Progressive caching
  3. Many modules within their options have an Advanced tab in which the Caching can be set to Use global or No caching

As described below, there are also rules for caching which are implemented within the Joomla code, and over which you have no control.

You can clear the cache through the administrator menu option System / Clear Cache. In general, you can think of Joomla having 3 levels of cache, increasing in aggresiveness

  1. Conservative caching
  2. Progressive caching
  3. Page caching

We'll look at these three in detail below.

In addition, Joomla developers can use caching facilities to store the result of database queries for example, to increase the responsiveness of the site, but this is outside the scope of administrator capabilities.

Page Caching

To switch this on, go to administrator Extensions / Plugins, find the System – Page Cache plugin, and enable it. This means that site pages will now be cached, and whenever they're requested again the cached page will be served, rather than it being generated by Joomla from the information in the database. The cached page will continue to be served until it's expired – as defined by the Cache Time parameter in the Global Configuration / System / Cache Settings.

If you're reading this page as a tutorial and want to test the page caching, then it's best to set the Global Configuration cache settings to

  • Cache Handler – File
  • Path to Cache Folder – leave blank
  • Cache Time – 15 (the default of 15 minutes)
  • System Cache – OFF – Caching disabled

To check page caching is working, go to a site webpage which displays an article. After you display that page you should find in the file system a cache/page directory with a file in it which has a filename like <string of hex digits>-cache-page-<string of hex digits>.php. (Joomla has to store separate cache pages for separate URLs so the second string of hex digits is a hash of the URL of the site webpage, to make the filename unique to that page).

Then use the administrator functionality to change the text of that article, and redisplay the site webpage. You should find the cached version, not your modified text.

Changing an article (or other Joomla item) does not clear the page cache for the webpage(s) where that article is displayed. To clear the page cache go to administrator System / Clear Cache. Click on the checkbox next to the Cache Group called "page", and press the Delete button. When you redisplay your web page it should now show your amended text.

If your site has a function like a shopping basket then applying page caching will cause problems, as pages have to show what the customer has already selected, rather than displaying a cached page which is common to everyone. However, you can configure the System Page Cache plugin to exclude caching specified Menu Items or specified URLs and URL ranges (in the Advanced tab), so that only truly static pages are cached.

Conservative Caching

With Conservative Caching you can cache the View output from components and the output from those Modules which allow caching. But note that this will work only on pages which are not cached using the Page Cache, as for those pages the whole webpage is cached, and Conservative Caching isn't even considered.

To switch on Conservative Caching:

  1. Go to administrator Global Configuration / System and within Cache Settings set System Cache to ON – Conservative caching
  2. Go to Extensions / Modules and select the modules which you'd like to be cached. If that module permits caching then under the Advanced tab you should be able to set Caching to
  • Use Global – this module will be cached (with the Global option now having been set to Conservative caching)
  • No caching – this module will not be cached.

(Note that the Cache Time in the Global Configuration is in minutes but the Cache Time in the Module settings is in seconds.)

To check it's working, go to your site, ensure that you are logged out, and navigate to a web page which displays an article. Check your file system and you should find a folder cache/com_content containing a cache file.

You'll also find other directories such as cache/com_languages (as displaying the page involves loading the current language, and this will be cached as well) and also directories relating to module cache, eg cache/com_modules. These result from the use of cache which developers have coded within the Joomla application.

If you edit and save that article, and then refresh the site page you will find that the site displays the updated text this time. This is because whenever the edit is saved, Joomla clears the cache for that article.

However, you can demonstrate that the cache is working if you edit the cache file in the cache/com_content directory using a basic text editor. Using the editor change one letter within the article text in the cache file and save the file. Then when you refresh the webpage you should see the update which you made to the cache file.

How can you select which component views get cached, and under what circumstances? Alas, you can't do this. This is determined by the Joomla core component developers and coded in the component php code. And the criteria are different for each component. However, you can easily discover what criteria are used because for each of the site components they are coded in the site controller.php file. For example, at time of writing (Joomla version 3.9.2) for the contacts component we find in components/com_contact/controller.php

if (JFactory::getApplication()->getUserState('') === null)
        $cachable = true;

This means that the views associated with contacts will be cachable unless there is session data keyed by – which will be the case if in the user session the user has displayed a contact form (eg on a page pointed to by a menuitem of type Contacts / Single Contact).

The equivalent file for articles components/com_content/controller.php contains:

$cachable = true;
if ($user->get('id') || ($this->input->getMethod() === 'POST' && (($vName === 'category' && $this->input->get('layout') !== 'blog') || $vName === 'archive' )))
        $cachable = false;

The expression $user->get('id') is true if this is a logged in user, so this means that articles are never cached for logged in users. The subsequent expressions relate to other conditions when the caching is not performed, even if the user is not logged in.

So in this way you can discover the circumstances under which caching is performed, but changing these is not advisable. You can also demonstrate that modules are being cached by using the Joomla Breadcrumbs module, ensuring it's displayed in some module position on the webpage, setting its Caching option and manually editing the cached file in cache/mod_breadcrumbs.

Progressive Caching

Like Conservative Caching, Progressive Caching also caches the output from component views and from modules. The functional difference between the two is that with Progressive Caching all modules are always cached. In this case setting the No caching option for a module has no effect. If the caching storage option is to File then you can find the modules cache file (the output from all modules is stored within the same file) within the cache/com_modules directory.

To switch on progressive caching go to administrator Global Configuration / System and within Cache Settings set System Cache to ON – Progressive caching.

As regards the conditions for caching of Joomla core component views there is no difference between conservative and progressive caching. Despite what you may read on some websites and responses to stack overflow questions, it is not the case that conservative caching relates to when the user is not logged on and progressive caching to when the user is logged on.


A summary of the caching types is below.

Page Caching

  • Configuration: Built-in Plugin (Extensions -> Plugin Manager -> System - Page Cache)
  • Caches: each whole page of your site
  • Based on: URL
  • More info:
    • Optional browser caching: Also caches on your visitors' browser/computer
    • Only caches pages for guest visitors (not for logged in visitors). Be careful using this plugin if you have an interactive site where you want to server content based on session/cookie information rather than on the plain URL only. Features like a shopping cart will not work.

Cache de vue

  • Configuration : Configuration->Cache
  • Caches : chaque vue d'un composant
  • Basé sur : URL, vue, paramètres...
  • Plus d'infos : les développeurs de composants doivent l'inclure dans leur code pour qu'il fonctionne. La plupart du temps, ce n'est pas le cas. Le composant principal de contenu pour Joomla! l'utilise, mais uniquement pour les visiteurs de votre site car il n'est pas obligatoire pour chacun des composants.

Mise en cache de modules

  • Configuration : Configuration->Cache
  • Caches : chaque module (individuellement personnalisé via les paramètres avancés de modules)
  • Basé sur : ?
  • Plus d'infos : vous devez le désactiver sur certains modules afin d'éviter certains problèmes.

Plus de cache

Si vous souhaitez voir d'autres systèmes et possibilités de cache, consultez les extensions tierces traitant de la mise en cache.

Mise en cache des moteurs ou stockages

  • Configuration: Configuration->Cache

Vous pouvez choisir le système que vous souhaitez utiliser sur votre site pour tous les caches. Les options actuelles sont : APC, Eaccelorator, File, Memcache, Redis, XCache.

APC par exemple met également en cache votre opcode php.

Pour les développeurs

La classe JCache permet différentes sortes et niveaux de cache. Les sous-classes suivantes ont été créées spécifiquement, mais vous pouvez ajouter la votre, ou utiliser la classe principale de différentes façons.

N'oubliez pas que le premier niveau de cache rencontré va remplacé toute mise en cache plus profonde. Je suppose qu'un trop grand nombre de niveaux est également contre-productif.

  • JCacheView met en cache et retourne la sortie d'une vue donnée (en MVC). Un identifiant de cache est automatiquement généré à partir de l'URI, une vue spécifique et sa méthode spécifique, ou vous pouvez donner le votre.

Cela peut être réalisé automatiquement via la fonction d'affichage de base du contrôleur. Par exemple, dans le contrôleur de votre composant :

class DeliciousController extends JController {
	function display() {
		parent::display(true); //true asks for caching.

Il existe également des paramètres d'url (urlparams) à considérer. Consultez "joomla stack".

Egalement, soyez conscient que toute mise à jour (comme les hits ou visites) ne sera PAS mise à jour (sauf si vous ajoutez cela à l'extérieur de cette méthode et donc plus en profondeur dans la partie MVC.)

  • JCachePage met en cache et retourne le corps de la page.
  • JCacheCallback met en cache et retourne la sortie et les résultats des fonctions ou des méthodes.

Si vous souhaitez mettre en cache des requêtes, c'est la classe pour le faire comme illustré ici : Utiliser la mise en cache pour accélérer votre code.

  • JCacheOutput met en cache et retourne la sortie.

Plutôt utilisé pour la mise en cache d'une partie spécifique du code php. Il agit comme un tampon de sortie, mais mis en cache.