Table of Contents
通过将输出内容ä¿�å˜åˆ°æ–‡ä»¶å†…ï¼Œç¼“å˜æœºåˆ¶å�¯ä»¥ç”¨æ�¥åŠ é€Ÿ
display() 或者fetch()的执行。
如果缓å˜è¢«å¼€å�¯ï¼Œé‚£ä¹ˆæ˜¾ç¤ºæ—¶ç¼“å˜çš„输出将替代é‡�新生æˆ�显示内容的æ“�作。
缓å˜å�¯ä»¥æž�大æ��高程åº�的执行速度,尤其当模æ�¿éœ€è¦�很长的计算时间的情况下。
当display() 或者
fetch()å¼€å�¯ç¼“å˜ï¼Œ
Smarty将生æˆ�å¯¹åº”çš„ç¼“å˜æ–‡ä»¶ï¼Œç¼“å˜æ–‡ä»¶åŒ…å�«äº†å¤šä¸ªæ¨¡æ�¿æ–‡ä»¶çš„内容,é…�置文件内容ç‰ç‰ã€‚
当页é�¢æ˜¯åЍæ€�çš„å†…å®¹ï¼Œé‚£ä¹ˆå¿…é¡»è°¨æ…Žè€ƒè™‘ä½ çš„ç¼“å˜å’Œç¼“å˜æ—¶é—´ã€‚ æ¯”å¦‚è¯´ï¼Œä½ çš„ç½‘ç«™é¦–é¡µé€šå¸¸ä¸�会更新得太快,那么å�¯ä»¥å°†å…¶ç¼“å˜ä¸€ä¸ªå°�æ—¶æˆ–è€…æ›´å¤šï¼Œä»¥ä¾¿åŠ é€Ÿå…¶æ˜¾ç¤ºã€‚ 从å�¦ä¸€æ–¹é�¢è®²ï¼Œå¦‚æžœä½ çš„é¡µé�¢ä¸Šæœ‰æŒ‰ç§’æ�¥æ˜¾ç¤ºæ–°å†…容的功能,那么该页é�¢å°±ä¸�应该被缓å˜ã€‚
缓å˜å�¯ä»¥é€šè¿‡è®¾ç½®
$caching为:Smarty::CACHING_LIFETIME_CURRENT 或 Smarty::CACHING_LIFETIME_SAVED�开�。
Example 15.1. 开å�¯ç¼“å˜
<?php
require('Smarty.class.php');
$smarty = new Smarty;
// 使用$smarty->cacheLifetime()å�¯ä»¥æ›´ç²¾ç¡®å®šä¹‰ç¼“å˜æ—¶é—´
$smarty->setCaching(Smarty::CACHING_LIFETIME_CURRENT);
$smarty->display('index.tpl');
?>
å¼€å�¯äº†ç¼“å˜ï¼Œè°ƒç”¨display('index.tpl')
会æ£å¸¸æ¸²æŸ“模æ�¿ï¼Œä½†ä¹Ÿä¼šä¿�å˜ä¸€ä»½è¾“出的内容到$cache_dir目录下的文件ä¸ï¼ˆç¼“å˜å‰¯æœ¬ï¼‰ã€‚
在下一次调用display('index.tpl'),
ç¼“å˜æ–‡ä»¶ä¼šæ›¿ä»£æ¸²æŸ“模æ�¿çš„过程。
技术说明
在$cache_dir下的文件,文件�与模��称相似。
虽然这些文件也有.php �缀,但它们�会被直接执行。请��编辑这些文件�
æ¯�个缓å˜é¡µé�¢éƒ½æœ‰ä¸€ä¸ªç¼“å˜è¿‡æœŸæ—¶é—´$cache_lifetime。
默认是3600秒,也就是一�时。
å½“è¶…è¿‡äº†æ¤æ—¶é—´ï¼Œç¼“å˜å°†è¢«é‡�新生æˆ�。
当设置$caching为Smarty::CACHING_LIFETIME_SAVED时,å�¯ä»¥ç»™æ¯�个缓å˜è®¾ç½®å…¶å�•ç‹¬çš„ç¼“å˜æ—¶é—´ã€‚
��$cache_lifetime。
Example 15.2. 为æ¯�个缓å˜è®¾ç½®$cache_lifetime
<?php
require('Smarty.class.php');
$smarty = new Smarty;
// 让æ¯�个缓å˜çš„过期时间都å�¯ä»¥åœ¨display执行å‰�å�•独设置。
$smarty->setCaching(Smarty::CACHING_LIFETIME_SAVED);
// 设置index.tpl的过期时间为5分钟
$smarty->setCacheLifetime(300);
$smarty->display('index.tpl');
// 设置home.tpl的过期时间为1�时
$smarty->setCacheLifetime(3600);
$smarty->display('home.tpl');
// 注�:当$caching设置了Smarty::CACHING_LIFETIME_SAVED�,
// 下�的$cache_lifetime将�会起效。
// home.tpl已�设置了过期时间为1�时,
// 所以�会��循下�的$cache_lifetime值,
// home.tpl的过期时间还是1�时。
$smarty->setCacheLifetime(30); // 30 ç§’
$smarty->display('home.tpl');
?>
当
$compile_check开�的时候(默认开�),
æ¯�个模æ�¿æ–‡ä»¶å’Œé…�ç½®æ–‡ä»¶éƒ½ä¼šåœ¨ç¼“å˜æ£€æŸ¥çš„æ—¶å€™æ‰§è¡Œç¼–译检查。
如果这些文件在缓å˜ç”Ÿæˆ�å�Žè¢«ä¿®æ”¹ï¼Œé‚£ä¹ˆç¼“å˜ä¼šé©¬ä¸Šé‡�新生æˆ�。
这是一个覆盖的选项,所以更好的性能建议把
$compile_check
设置�false。
Example 15.3.Â å…³é— $compile_check
<?php
require('Smarty.class.php');
$smarty = new Smarty;
$smarty->setCaching(Smarty::CACHING_LIFETIME_CURRENT);
$smarty->setCompileCheck(false);
$smarty->display('index.tpl');
?>
如果开�了
$force_compile,
ç¼“å˜æ–‡ä»¶å°†æ€»æ˜¯ä¼šé‡�新生æˆ�。效果和关é—ç¼“å˜æ˜¯ä¸€æ ·çš„,
而且还会�低性能。
$force_compile
一般用于
调试的目的。
更确当的方å¼�是把缓å˜$caching
设置�Smarty::CACHING_OFF。
isCached()
函数å�¯ä»¥æ£€æŸ¥æ¨¡æ�¿çš„ç¼“å˜æ˜¯å�¦å˜åœ¨ã€‚
å¦‚æžœä½ çš„æ¨¡æ�¿æ˜¯éœ€è¦�读å�–æŸ�些数æ�®ï¼ˆå¦‚æ•°æ�®åº“),
é‚£ä¹ˆä½ å�¯ä»¥ç”¨å®ƒæ�¥è·³è¿‡è¿™ä¸ªè¿‡ç¨‹ã€‚
Example 15.4. 使用 isCached()
<?php
require('Smarty.class.php');
$smarty = new Smarty;
$smarty->setCaching(Smarty::CACHING_LIFETIME_CURRENT);
if(!$smarty->isCached('index.tpl')) {
// 找ä¸�到缓å˜ï¼Œè¿™é‡Œè¿›è¡Œä¸€äº›èµ‹å€¼æ“�作
$contents = get_database_contents();
$smarty->assign($contents);
}
$smarty->display('index.tpl');
?>
ä½ å�¯ä»¥ä½¿ç”¨{nocache}{/nocache}æ�¥è®¾ç½®é¡µé�¢ä¸Šéƒ¨åˆ†åŒºå�—是动æ€�的(ä¸�缓å˜ï¼‰ï¼Œ
å�Œæ ·ä½ 也å�¯ä»¥ä½¿ç”¨
{insert}函数,或者nocacheå�‚æ•°æ�¥è¾¾åˆ°å�Œæ ·ç›®çš„。
比如说我们希望把整个页é�¢ç¼“å˜ï¼Œé™¤äº†é¡µé�¢ä¸¤è¾¹æ˜¾ç¤ºçš„banner广告。
那么我们�以用{insert}�显示banner广告,
è¿™æ ·å°±å�¯ä»¥åœ¨ç¼“å˜çš„内容里é�¢ï¼Œä¿�å˜å¹¿å‘Šéƒ¨åˆ†çš„动æ€�效果。
��
{insert}的详细文档。
ä½ å�¯ä»¥é€šè¿‡clearAllCache()æ�¥åˆ 除全部缓å˜ï¼Œæˆ–者
用clearCache()
æ�¥åˆ 除特定的缓å˜ç»„
的缓å˜å†…容。
Example 15.5.Â åˆ é™¤ç¼“å˜
<?php
require('Smarty.class.php');
$smarty = new Smarty;
$smarty->setCaching(Smarty::CACHING_LIFETIME_CURRENT);
// ä»…åˆ é™¤index.tpl的缓å˜
$smarty->clearCache('index.tpl');
// åˆ é™¤å…¨éƒ¨ç¼“å˜
$smarty->clearAllCache();
$smarty->display('index.tpl');
?>
