Table of Contents
Le cache est utilisée pour accélérer l'appel de display()
ou de fetch()
en sauvegardant leur résultat
dans un fichier. Si un fichier de cache est disponible lors d'un appel,
il sera affiché sans qu'il ne soit nécessaire de regénérer le résultat.
Le système de cache peut accélérer les traitements de façon impressionnante,
en particulier les templates dont la compilation est très longue. Comme
le résultat de display()
ou de
fetch()
est dans le cache, un fichier de cache
peut être composé de plusieurs fichiers de templates, plusieurs fichiers
de configuration, etc.
Comme les templates sont dynamiques, il est important de faire attention à la façon dont les fichiers de cache sont générés, et pour combien de temps. Si par exemple vous affichez la page d'accueil de votre site Web dont le contenu ne change pas souvent, il peut être intéressant de mettre cette page dans le cache pour une heure ou plus. A l'inverse, si vous affichez une page de météo mise a jour toutes les minutes, mettre cette page en cache n'a aucun sens.
La première chose à faire est d'activer le cache en
mettant
$caching
= 1 (ou 2)
.
Example 14.1. Activation du cache
<?php require('Smarty.class.php'); $smarty = new Smarty; $smarty->caching = 1; $smarty->display('index.tpl'); ?>
Avec le cache activé, la fonction display('index.tpl')
va afficher
le template mais sauvegardera par la même occasion une copie du résultat
dans un fichier (de cache) du répertoire
$cache_dir
.
Au prochain appel de display('index.tpl')
, le fichier de cache sera préféré
à la réutilisation du template.
Note technique
Les fichiers situés dans
$cache_dir
sont nommés de la même façon que les templates.
Bien qu'ils aient une extension .php
, ils ne sont pas vraiment
directement exécutable. N'éditez surtout pas ces fichiers !
Tout fichier de cache a une durée de vie limitée déterminée par $cache_lifetime
. La valeur par
défaut est 3600 secondes, i.e. 1 heure. Une fois que cette durée est
dépassée, le cache est regénéré. Il est possible de donner
une durée d'expiration propre à chaque fichier de cache en réglant
$caching
=2
.
Se reporter à la documentation de $cache_lifetime
pour plus de
détails.
Example 14.2. Réglage individuel de $cache_lifetime
<?php require('Smarty.class.php'); $smarty = new Smarty; $smarty->caching = 2; // régler la durée de vie individuellement // règle la durée de vie du cache a 15 minutes pour index.tpl $smarty->cache_lifetime = 300; $smarty->display('index.tpl'); // règle la durée de vie du cache à 1 heure pour home.tpl $smarty->cache_lifetime = 3600; $smarty->display('home.tpl'); // NOTE : le réglage suivant ne fonctionne pas quand $caching = 2. La durée de vie // du fichier de cache de home.tpl a déja été réglée a 1 heure et ne respectera // plus la valeur de $cache_lifetime. Le cache de home.tpl expirera toujours // dans 1 heure. $smarty->cache_lifetime = 30; // 30 secondes $smarty->display('home.tpl'); ?>
Si
$compile_check
est actif, chaque fichier de template et de configuration qui a un rapport
avec le fichier de cache sera vérifié pour détecter une éventuelle
modification. Si l'un de ces fichiers a été modifié depuis que le fichier de cache a été
généré, le cache est immédiatement regénéré. Ce processus est couteux, donc,
pour des raisons de performances, mettez ce paramètre à FALSE
pour une application
en production.
Example 14.3. Activation de $compile_check
<?php require('Smarty.class.php'); $smarty = new Smarty; $smarty->caching = 1; $smarty->compile_check = true; $smarty->display('index.tpl'); ?>
Si $force_compile
est actif,
les fichiers de cache sont toujours regénérés. Ceci revient finalement à
désactiver le cache. $force_compile
est utilisé à des fins de débogage,
un moyen plus efficace de désactiver le cache est de régler
$caching
= 0
.
La fonction is_cached()
permet
de tester si un template a ou non un fichier de cache valide.
Si vous disposez d'un template en cache qui requiert une requête
à une base de données, vous pouvez utiliser cette méthode plutôt
que $compile_check.
Example 14.4. Exemple avec is_cached()
<?php require('Smarty.class.php'); $smarty = new Smarty; $smarty->caching = 1; if(!$smarty->is_cached('index.tpl')) { // pas de cache disponible, on assigne $contents = get_database_contents(); $smarty->assign($contents); } $smarty->display('index.tpl'); ?>
Vous pouvez rendre dynamiques seulement certaines parties d'une
page avec la fonction de template {insert}
.
Imaginons que toute une page doit être mise en cache à part
une bannière en bas à droite. En utilisant une fonction
{insert}
pour la
bannière, vous pouvez garder cet élément dynamique dans le contenu qui
est en cache. Reportez-vous à la documentation
{insert}
pour plus de détails
ainsi que des exemples.
Vous pouvez effacer tous les fichiers du cache avec la fonction clear_all_cache()
, ou de façon
individuelle (ou par groupe)
avec la fonction clear_cache()
.
Example 14.5. Nettoyage du cache
<?php require('Smarty.class.php'); $smarty = new Smarty; $smarty->caching = 1; // efface le fichier de cache du template 'index.tpl' $smarty->clear_cache('index.tpl'); // efface tous les fichiers du cache $smarty->clear_all_cache(); $smarty->display('index.tpl'); ?>