1. Smarty缓存
smarty缓存是将输出的内容保存到文件中。
与编译的smarty模板相同之处:都会检查模板是否更新,有更新会重新生成。
不同之处:缓存将所有运行的结果保存的文件中,模板编译只是对smarty模板写缓存文件。
2. 缓存目录配置
配置smarty的目录
$this->setTemplateDir('/home/gang/php/smarty/templates/');
$this->setCompileDir('/home/gang/php/smarty/templates_c/');
$this->setConfigDir('/home/gang/php/smarty/configs/');
$this->setCacheDir('/home/gang/php/smarty/cache/');
setCacheDir为缓存文件目录
3. 开启缓存
通过Smarty::CACHING_LIFETIME_CURRENT 或 Smarty::CACHING_LIFETIME_SAVED来开启。
setCacheLifetime为设置缓存的失效时间。默认为3600, 1小时
require('Smarty.class.php');
$smarty = new Smarty();
$smarty->setCaching(Smarty::CACHING_LIFETIME_SAVED);
$smarty->setCacheLifetime(60);
$smarty->display('index.tpl');
这样会在$cache_dir下生成一个缓存文件
4. 同一个模板生成多个缓存文件
通常一个页面会根据传递的参数不同页面内容不一样, 如果要使用smarty缓存就需要生成多个缓存页面。
通过$cache_id 来配置。
$id = $_GET['id'];
require('Smarty.class.php');
$smarty->setCaching(Smarty::CACHING_LIFETIME_SAVED);
$smarty->setCacheLifetime(60);
$smarty->assign('id', $id);
$smarty->display('index.tpl', $id);
这样在$cache_dir 下会生成多个模板。
5. 检查模板是否存在
通常在模板之前都会有一些数据的获取和逻辑处理,对于已经有缓存文件的页面,就不需要这些处理了。
对这种情况,通过是否有缓存判断可以直接跳过。可以有极大的提升性能。
$id = $_GET['id'];
require('Smarty.class.php');
$smarty->setCaching(Smarty::CACHING_LIFETIME_SAVED);
$smarty->setCacheLifetime(60);
if(!$smarty->isCached('index.tpl', $id)){
//获取数据逻辑处理
$data = get_data();
$smarty->assign('data', $data);
$smarty->assign('id', $id);
}
$smarty->display('index.tpl', $id);
6. 删除特定缓存
要删除特定$cache_id的全部缓存, 需要给clearCache() 传递null作为第一个参数。
$smarty->setCaching(Smarty::CACHING_LIFETIME_CURRENT);
// 删除$cache_id为"sports"的全部缓存
$smarty->clearCache(null,'sports');
$smarty->display('index.tpl','sports');
7. 不需要缓存的部分
页面中总有些内容是不需要缓存的部分。
可以通过{nocache}{/nocache}标签来控制。
下面两种方式来展示
{$smarty.now|date_format nocache}
{nocache}{$time}{/nocache}