Heim > Artikel > Backend-Entwicklung > Ausführliche Erklärung, wie die Smarty-Vorlagen-Engine zwischenspeichert
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; //缓存时间
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"]);
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');
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的缓存
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表示区域名
Block registrieren:
$smarty->register_block(name, smarty_block_name, false); //第三参数false表示该区域不被缓存
Vorlagenschreiben:
{name}内容 {/name}
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; } ?>
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); ?>
Verwendete Vorlage: tpl
已经缓存的:{$smarty.now}<br> {cacheless} 没有缓存的:{$smarty.now} {/cacheless}
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);
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('current_time','smarty_function_current_time',false); if(!$smarty->is_cached()){ ....... } $smarty->display('index.tpl');
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!