Cache
From Joomla! Documentation
Joomla has different ways of caching "things". Here is an overview for administrators and developers – what, where and when.
For Administrators
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.
Su una pagina web del sito Joomla ci sono 3 cose che possono essere memorizzate nella cache:
- L'intera pagina stessa - la cache della pagina
- L'output dal componente Joomla per quella pagina Web, noto come visualizzazione di cache
- L'output dei moduli mostrati in quella pagina, noto come modulo del cache
Hai un certo numero di impostazioni della cache che ti permettono di controllare ciò che viene memorizzato nella cache:
- Il plugin di sistema "System - Page Cache"
- La configurazione globale, la scheda Sistema, Impostazioni cache. Qui l'opzione System Cache può essere impostata su
- * OFF - Memorizzazione nella cache disabilitata
- * ON - Memorizzazione nella cache conservativa
- * ON: caching progressivo
- Molti moduli all'interno delle loro opzioni hanno una scheda Avanzate in cui è possibile impostare la memorizzazione nella cache su Usa cache globale o No
Come descritto di seguito, ci sono anche regole per la memorizzazione nella cache che sono implementate all'interno del codice Joomla e su cui non si ha alcun controllo.
È possibile cancellare la cache tramite l'opzione di menu amministratore Sistema / Cancella cache.
In generale, puoi pensare a Joomla con 3 livelli di cache, aumentando l'aggressività
- Conservazione nella cache conservativa
- Memorizzazione nella cache progressiva
- Cache delle pagine
Vedremo questi tre in dettaglio qui sotto.
Inoltre, gli sviluppatori di Joomla possono utilizzare le funzionalità di memorizzazione nella cache per archiviare il risultato delle query del database, ad esempio, per aumentare la reattività del sito, ma questo non rientra nell'ambito delle funzionalità dell'amministratore.
Page Caching
Per accenderlo, vai su Estensioni amministratore / Plugin, trova il plugin System - Page Cache e abilitalo. Ciò significa che le pagine del sito verranno ora memorizzate nella cache e, ogni volta che vengono richieste nuovamente, verrà pubblicata la pagina cache, anziché essere generata da Joomla dalle informazioni nel database. La pagina memorizzata nella cache continuerà a essere pubblicata fino alla scadenza, come definito dal parametro Cache Time nelle impostazioni di Global Configuration / System / Cache.
Se stai leggendo questa pagina come un'esercitazione e vuoi testare la memorizzazione nella cache della pagina, allora è meglio impostare le impostazioni della cache della Configurazione globale su
- Cache Handler - File
- Percorso della cartella della cache: lasciare vuoto
- Cache Time - 15 (il valore predefinito di 15 minuti)
- System Cache - OFF - Memorizzazione nella cache disabilitata
Per verificare il funzionamento della cache delle pagine, vai alla pagina web del sito che mostra un articolo. Dopo aver visualizzato quella pagina dovresti trovare nel file system una directory cache/page</ tt> con un file al suo interno che ha un nome di file come <stringa di cifre esadecimali>-cache-page-<stringa di cifre esadecimali>.php</ tt>. (Joomla deve memorizzare pagine cache separate per URL separati in modo che la seconda stringa di cifre esadecimali sia un hash dell'URL della pagina web del sito, per rendere il nome file univoco per quella pagina).
Quindi utilizzare la funzionalità di amministratore per modificare il testo dell'articolo e visualizzare nuovamente la pagina web del sito. Dovresti trovare la versione in cache, non il testo modificato.
Cambiare un articolo (o un altro elemento di Joomla) non cancella la cache della pagina per la pagina web dove quell'articolo è visualizzato. Per cancellare la cache della pagina vai all'amministratore System / Clear Cache. Fare clic sulla casella di controllo accanto al Gruppo cache chiamato "pagina" e premere il pulsante Elimina. Quando si rivisualizza la pagina web dovrebbe ora mostrare il testo modificato.
Se il tuo sito ha una funzione come un carrello della spesa, l'applicazione del page caching causerà problemi, in quanto le pagine devono mostrare ciò che il cliente ha già selezionato, piuttosto che visualizzare una pagina memorizzata nella cache che è comune a tutti. Tuttavia, è possibile configurare il plugin System Page Cache per escludere la cache di voci di menu o URL e intervalli di URL specifici (nella scheda Avanzate), in modo che solo le pagine veramente statiche vengano memorizzate nella cache.
Caching conservativo
Con Conservative Caching è possibile mettere in cache l'output View dei componenti e l'output di quei moduli che permettono il caching. Ma si noti che questo funzionerà solo su pagine che non sono messe in cache usando la cache delle pagine, dato che per quelle pagine l'intera pagina web è in cache, e la cache conservativa non è nemmeno considerata.
Per attivare la caching conservativo:
- Go to Administrator → System → Global Configuration → System tab and within Cache Settings, set System Cache to ON – Conservative caching
- Go to Administrator → Extensions → Modules and select the modules that 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.)
Per verificare che funzioni, vai al tuo sito ' assicurati di essere disconnesso ' e vai a una pagina web che mostra un articolo. Controlla il tuo file system e dovresti trovare una cartella cache / com_content contenente un file cache.
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, e.g. cache/com_modules. These result from the use of cache that developers have coded within the Joomla application.
Se modifichi e salvi l'articolo, quindi aggiorni la pagina del sito, questa volta il sito visualizzerà il testo aggiornato. Questo perché ogni volta che la modifica viene salvata, Joomla svuota la cache per quell'articolo.
Tuttavia, è possibile dimostrare che la cache funziona se si modifica il file della cache nella directory cache / com_content utilizzando un editor di testo di base. Utilizzando l'editor, modifica una lettera all'interno del testo dell'articolo nel file della cache e salva il file. Quindi quando aggiorni la pagina web dovresti vedere l'aggiornamento che hai fatto al file cache.
Come è possibile selezionare quali viste dei componenti vengono memorizzate nella cache e in quali circostanze? Ahimè, non puoi farlo. Ciò è determinato dagli sviluppatori del componente principale di Joomla e codificato nel codice php del componente. E i criteri sono diversi per ciascun componente. Tuttavia, puoi facilmente scoprire quali criteri vengono utilizzati perché per ciascuno dei componenti del sito sono codificati nel file controller.php del sito. Ad esempio, al momento della stesura (versione Joomla 3.9.2) per il componente contatti troviamo in components/com_contact / controller.php
if (JFactory::getApplication()->getUserState('com_contact.contact.data') === null)
{
$cachable = true;
}
Questo significa che le viste associate ai contatti saranno accessibili a meno che non ci siano dati di sessione digitati da com_contact.contact.data - che sarà il caso se nella sessione utente l'utente ha visualizzato un modulo di contatto (ad esempio su una pagina indicata da un menuitem di tipo Contatti / Contatto singolo).
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. 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.
In this way you can discover the circumstances under which caching is performed, but changing these is not advisable.
Si può anche dimostrare che i moduli sono in cache utilizzando il modulo Joomla Breadcrumbs, assicurandosi che sia visualizzato in qualche posizione del modulo sulla pagina web, impostando la sua opzione Caching e modificando manualmente il file in cache/mod_breadcrumbs.
Progressive Caching
Come il Conservative Caching, anche il Progressive Caching memorizza l'output dalle viste dei componenti e dai moduli. La differenza funzionale tra i due è che con il Progressive Caching tutti i moduli sono sempre in cache. In questo caso, impostare l'opzione No caching per un modulo non ha alcun effetto. Se l'opzione caching storage è File allora si può trovare il file di cache dei moduli (l'output di tutti i moduli è memorizzato nello stesso file) all'interno della cartella cache/com_modules.
Per attivare la cache progressiva, passare all'amministratore Configurazione globale / Sistema e, all'interno delle impostazioni della cache, impostare la cache di sistema su ON - Cache progressiva.
Per quanto riguarda le condizioni per il caching di Joomla core component views non c'è differenza tra il caching conservativo e quello progressivo. Nonostante quello che si può leggere su alcuni siti web e le risposte alle domande di overflow stack, non è il caso che la cache conservativa si riferisce a quando l'utente non è connesso e la cache progressiva a quando l'utente è connesso.
Summary
A summary of the caching types is below.
Page Caching
- Configuration: Built-in Plugin (Administrator → 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.
View Caching
- Configuration: Global Config -> Cache
- Caches: each view of a component
- Based on: URL, view, parameters, ...
- More info: Component developers have to include this in their code to work. Mostly this is not done. The Joomla main content component uses this, but only for guest visitors of your site though this is not obligated for every component.
Module Caching
- Configuration: Global Config -> Cache
- Caches: each module (individually customized via each module's Advanced Parameters)
- Based on: the module id, the user's view levels and the Itemid parameter in the HTTP request
- More info: You must disable it on some modules to avoid problems
Further Caching
If you want to check out other cache systems and possibilities, you might want to check out the third-party extensions around caching.
Caching Engines or Storage
- Configuration: Global Config → Cache
Here you can choose which system you want your site to use for all caching. Some options are: APC, Eaccelorator, File, Memcache, Redis, XCache.
APC, for example, also caches your PHP opcode.
For Developers
The class JCache allows a lot of different sorts and levels of caching. The following subclasses are made specifically, but you can add your own, or use the main one in many different ways.
Don't forget that the first level of cache encountered, will override any deeper caching. I suppose that too many levels is also counterproductive (to be verified though).
- JCacheView caches and returns the output of a given view (in MVC). A cache id is automatically generated from the URI, specific view and its specific method, or you can give your own.
This can automatically be done via the base controller's display function. For example in the controller of your component:
class DeliciousController extends JController {
function display() {
parent::display(true); //true asks for caching.
}
}
There are also some urlparams to consider. Check this "joomla stack"
Also, be aware that any updates (such as hits or visit counts) will not be updated (unless you add this outside this method and thus any deeper MVC-part.)
- JCachePage caches and returns the body of the page.
- JCacheCallback caches and returns the output and results of functions or methods.
If you want to cache queries, this is a good class for it, as illustrated here: Using caching to speed up your code
- JCacheOutput caches and returns output.
This is rather meant for caching a specific part of PHP code. It acts like an output buffer, but cached.
References