Get Smarty

Donate

Paypal

Smarty Icon

You may use the Smarty logo according to the trademark notice.

Smarty Template Engine Smarty Template Engine

For sponsorship, advertising, news or other inquiries, contact us at:

Sites Using Smarty

Advertisement

Chapter 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).

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

  

Comments
No comments for this page.

Advertisement

Sponsors [info]

Sponsors