smarty template engine
Saturday, July 04, 2009  
download | documentation | faq | forum | mailing lists | changelog | contribs 


search for in the  


Chapitre 14. Cache

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.

Paramétrer le cache

La première chose à faire est d'activer le cache en mettant $caching = 1 (ou 2).

Exemple 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.

Exemple 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.

Exemple 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.

Exemple 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().

Exemple 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');
?>



 

credits 

Smarty Copyright © 2002-2008
New Digital Group, Inc.

All rights reserved.