Maison  >  Article  >  développement back-end  >  Explication détaillée de la façon dont le moteur de modèles Smarty met en cache

Explication détaillée de la façon dont le moteur de modèles Smarty met en cache

*文
*文original
2018-01-02 09:58:021441parcourir

Cet article présente principalement le mécanisme de mise en cache du moteur de modèles Smarty et analyse les principes du mécanisme de mise en cache du moteur de modèles Smarty sous forme d'exemples, comment l'activer et l'utiliser, et les précautions associées. Les amis dans le besoin peuvent s'y référer. J'espère que cela aide tout le monde.

Les détails sont les suivants :

Tout d'abord, parlons de la mise en cache intelligente et de la compilation. Ce sont deux concepts différents. La compilation est activée par défaut, tandis que le mécanisme de mise en cache doit être activé. dessus manuellement. Smarty compilé Le fichier est toujours un fichier PHP, il est donc toujours compilé lors de son exécution. S'il implique une base de données, il doit toujours accéder à la base de données, donc la surcharge n'est pas faible, une mise en cache intelligente est donc nécessaire pour le résoudre. !

1. Activer le cache global

$smarty->cache_dir = "/caches/"; //缓存目录
$smarty->caching = true; //开启缓存,为flase的时侯缓存无效
$smarty->cache_lifetime = 3600; //缓存时间

2. Utiliser plusieurs caches pour une page

Par exemple : un. article La page modèle générera plusieurs pages d'article, qui sont bien sûr mises en cache dans plusieurs pages. C'est très simple à implémenter. Il suffit de définir le deuxième paramètre dans la méthode display() et de spécifier un identifiant unique. Le code php suivant :

$smarty->display('index.tpl',$_GET["article_id"]);

Comme ci-dessus, mettez en cache une page d'article via le deuxième paramètre de l'identifiant de l'article.

3. Réduisez le coût de la mise en cache

En d'autres termes, les pages mises en cache n'ont pas besoin d'être traitées par la base de données et peuvent être jugées par is_cached(). méthode!

if(!$smarty->is_cached('index.tpl')){
 //调用数据库
}
$smarty->display('index.tpl');

4. Vider le cache

Généralement, le cache n'est pas activé pendant le processus de développement, car le résultat de sortie ne change pas pendant la durée du cache. , mais pendant le processus de candidature, l'activation du cache peut améliorer considérablement les performances Web. La méthode pour vider le cache est la suivante :

clear_all_cache();//清除所有缓存
clear_cache('index.tpl');//清除index.tpl的缓存
clear_cache('index.tpl',cache_id);//清除指定id的缓存

5. 🎜>Si une partie d'une page est mise en cache et une autre partie est mise en cache, vous pouvez le faire sans mise en cache. Par exemple, pour afficher le nom de connexion de l'utilisateur, vous devez désactiver le cache. Smarty propose les trois solutions suivantes : .

(1) Utiliser une partie du modèle d'insertion à ne pas mettre en cache

Définir une fonction de traitement à utiliser par la balise d'insertion Le format du nom de la fonction est : insert_xx (array $params, object &$smarty. ) où xx est le nom de l'insertion. C'est-à-dire que si la fonction que vous définissez est insert_abc, alors la méthode utilisée dans le modèle est {insert name=abc>

. params

. Il peut également être transformé en plug-in d'insertion. Le nom du fichier est : insert.xx.php et la fonction est nommée :smarty_insert_aa($params, &$smarty), la définition xx est la. comme ci-dessus

(2) $smarty->register_block($params, &$smarty) empêche la mise en cache d'un certain bloc de la page entière

Définir un bloc :

Bloc de registre :

smarty_block_name($params,$content, &$smarty){return $content;} 
//name表示区域名

Écriture du modèle :

$smarty->register_block(name, smarty_block_name, false);
//第三参数false表示该区域不被缓存

Écrit sous forme de plug-in de bloc :
{name}内容 {/name}

Étape 1 : Définir une fonction de plug-in : block.cacheless.php, et placez-la dans le répertoire plugins de smarty

Le contenu de block.cacheless.php est le suivant :

Étape 2 : Écrire des programmes et des modèles
<?php
function smarty_block_cacheless($param, $content, &$smarty) {
return $content;
}
?>

Exemple de programme : testCacheLess.php

Modèle utilisé : tpl

<?php
include(Smarty.class.php);
$smarty = new Smarty;
$smarty->caching=true;
$smarty->cache_lifetime = 6;
$smarty->display(cache.tpl);
?>

Exécutez-le maintenant et constatez que cela ne fonctionne pas. Les deux lignes de contenu sont mises en cache

已经缓存的:{$smarty.now}<br>
{cacheless}
没有缓存的:{$smarty.now}
{/cacheless}

Étape 3 : réécrivez Smarty_Compiler.class.php

(

Remarque : Ce fichier est très important, veuillez d'abord le sauvegarder pour le restaurer si nécessaire)Rechercher :


Copier le code

Code comme suit :

$this->_plugins[block][$tag_command] = array($plugin_func, null, null, null, true);

est modifié en :

Vous pouvez également changer directement le dernier paramètre de la phrase originale en false, ce qui signifie désactiver le cache par défaut.

if($tag_command == cacheless) $this->_plugins[block][$tag_command] = array($plugin_func, null, null, null, false);
else $this->_plugins[block][$tag_command] = array($plugin_func, null, null, null, true);
(3) Utilisez register_function pour empêcher le plug-in de sortir du cache

index.tpl :

Annotation :

<p>{current_time}{/p}
index.php:
function smarty_function_current_time($params, &$smarty){
  return date("Y-m-d H:m:s");
}
$smarty=new smarty();
$smarty->caching = true;
$smarty->register_function(&#39;current_time&#39;,&#39;smarty_function_current_time&#39;,false);
if(!$smarty->is_cached()){
  .......
}
$smarty->display(&#39;index.tpl&#39;);
Définir une fonction, nom de fonction Le format est :

smarty_type_name($params, &$smarty)

le type est une fonction
name est le nom de l'étiquette défini par l'utilisateur, ici c'est {current_time >

Les deux paramètres sont obligatoires, même s'ils ne sont pas utilisés dans la fonction, ils doivent être écrits. Les fonctions des deux paramètres sont les mêmes que ci-dessus.

Recommandations associées :

Analyse simple Yii2 à l'aide du cache

Construire une instance de moteur de modèle pour créer un framework PHP

Quels sont les opérateurs de modèles pour php smarty ? Comment utiliser les opérateurs ?

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn