Ausführliche Erklärung, wie die Smarty-Vorlagen-Engine zwischenspeichert

*文
Freigeben: 2023-03-18 20:58:01
Original
1498 Leute haben es durchsucht

In diesem Artikel wird hauptsächlich der Caching-Mechanismus der Smarty-Template-Engine vorgestellt und anhand von Beispielen die Prinzipien des Smarty-Template-Engine-Caching-Mechanismus, die Aktivierung und Verwendung sowie entsprechende Vorsichtsmaßnahmen analysiert. Ich hoffe, es hilft allen.

Die Details sind wie folgt:

Lassen Sie uns zunächst über intelligentes Caching und Kompilieren sprechen. Dies sind zwei verschiedene Konzepte, während der Caching-Mechanismus aktiviert werden muss manuell kompiliert. Die Datei ist immer noch eine PHP-Datei, daher wird sie bei der Ausführung immer noch kompiliert. Wenn es sich um eine Datenbank handelt, ist der Overhead nicht gering, daher ist Smarty-Caching erforderlich, um das Problem zu lösen !

1. Globalen Cache aktivieren

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

2. Mehrere Caches für eine Seite verwenden

Zum Beispiel: an Artikel Die Vorlagenseite generiert mehrere Artikelseiten, die natürlich auf vielen Seiten zwischengespeichert werden. Die Implementierung ist sehr einfach. Legen Sie einfach den zweiten Parameter in der display()-Methode fest und geben Sie einen eindeutigen Bezeichner an. Der folgende PHP-Code:

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

Zwischenspeichern Sie wie oben eine Artikelseite über den zweiten Parameter der Artikel-ID.

3. Reduzieren Sie die Kosten für das Caching

Mit anderen Worten, zwischengespeicherte Seiten müssen nicht von der Datenbank verarbeitet werden und können anhand von is_cached() beurteilt werden. Verfahren!

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

4. Leeren Sie den Cache

Im Allgemeinen ist der Cache während des Entwicklungsprozesses nicht aktiviert, da sich das Ausgabeergebnis während der Cache-Zeit nicht ändert , aber während des Bewerbungsprozesses kann die Aktivierung des Cachings die Webleistung erheblich verbessern:

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

5. Deaktivieren Sie das lokale Caching

Wenn ein Teil einer Seite zwischengespeichert wird und ein anderer Teil zwischengespeichert wird, können Sie dies ohne Zwischenspeicherung tun. Um beispielsweise den Anmeldenamen des Benutzers anzuzeigen, müssen Sie den Cache deaktivieren:

(1) Verwenden Sie einen Teil der Einfügevorlage, der nicht zwischengespeichert werden soll

Definieren Sie eine Verarbeitungsfunktion, die vom Einfüge-Tag verwendet werden soll. Das Format des Funktionsnamens ist: insert_xx (Array $params, Objekt &$smarty). Dabei ist xx der Name der Einfügung. Das heißt, wenn die von Ihnen definierte Funktion insert_abc ist, lautet die in der Vorlage verwendete Methode {insert name=abc}

. Die Parameter werden über $params übergeben

Es kann auch in ein Einfüge-Plugin umgewandelt werden. Der Dateiname lautet: insert.xx.php und die Funktion heißt :smarty_insert_aa($params, &$smarty), xx-Definition ist dieselbe wie oben

(2) $smarty->register_block($params, &$smarty) verhindert, dass ein bestimmter Block der gesamten Seite zwischengespeichert wird

Definieren Sie einen Block:

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

Block registrieren:

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

Vorlagenschreiben:

{name}内容 {/name}
Nach dem Login kopieren

Als Block-Plugin geschrieben:

Schritt 1: Definieren Sie eine Plug-in-Funktion: block.cacheless.php und platzieren Sie sie im Plugins-Verzeichnis von smarty

Der Inhalt von block.cacheless.php lautet wie folgt:

<?php
function smarty_block_cacheless($param, $content, &$smarty) {
return $content;
}
?>
Nach dem Login kopieren

Schritt 2: Programme und Vorlagen schreiben

Beispielprogramm: testCacheLess.php

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

Verwendete Vorlage: tpl

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

Führen Sie es jetzt aus und stellen Sie fest, dass es nicht funktioniert. Beide Inhaltszeilen werden zwischengespeichert

Schritt 3: Smarty_Compiler.class.php neu schreiben (Hinweis: Dies Datei ist sehr wichtig, bitte sichern Sie sie zuerst, um sie bei Bedarf wiederherzustellen)

Suchen:

Code kopierenCode wie folgt:

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

wird geändert in:

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);
Nach dem Login kopieren

Sie können den letzten Parameter des Originalsatzes auch direkt auf „false“ ändern, was bedeutet, dass der Standardcache deaktiviert wird.

(3) Verwenden Sie register_function, um zu verhindern, dass das Plug-in aus dem Cache ausgegeben wird

index.tpl:

<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;);
Nach dem Login kopieren

Annotation:

Define eine Funktion, Funktionsname Das Format ist: smarty_type_name($params, &$smarty)
Typ ist Funktion

Name ist der benutzerdefinierte Labelname, hier ist es {current_time }

Die beiden Parameter sind erforderlich, auch wenn sie nicht in der Funktion verwendet werden, müssen sie geschrieben werden. Die Funktionen der beiden Parameter sind die gleichen wie oben.

Verwandte Empfehlungen:

Yii2 einfache Analyse mit Cache

Erstellen Sie eine Template-Engine-Instanz zum Erstellen eines PHP-Frameworks

Was sind die Template-Operatoren für PHP Smarty? Wie verwendet man Operatoren?

Das obige ist der detaillierte Inhalt vonAusführliche Erklärung, wie die Smarty-Vorlagen-Engine zwischenspeichert. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage