Smarty 模板引擎教程(六)—缓存机制

功能强大的应用程序一般都有很大的开销,通常是数据获取和处理操作带来的。对于Web应用程序,这个问题是由于HTTP协议的无状态性造成的。由于HTTP协议是无状态的,对于每个页面请求, 都会重复地执行相同的操作, 而不管数据是否修改更新过。 这样就会造成服务器的巨大压力。为了解决这种问题,Smarty提供了一种缓存机制的解决方案。将重复访问的页面生成一个静态文件, 只有当内容有修改或者过了设定的时效, 及重新请求页面。 1.缓存开启
$_smarty->caching = 0; //0表示不开启缓存
$_smarty->cache_dir = ROOT_PATH.'/cache/'; //缓存文件目录
$_smarty->caching = 1; //0表示开启缓存
$_smarty->cache_lifetime = 60 * 60 * 24; //设定缓存周期,一天
当缓存开启, 并且设置了一天时间, 第一次运行的时候, 会生成一个编译文件和缓存文件。 2.一个模板多个缓存 默认情况下, 一个模板会自动生成一个缓存。 但如果有分页列表, 或者产品详情之类的页面,他本身就采用了一个模板,而通过分页或者产品id产生了不同的内容,这个时候, 我们就有必要采用通过ID或者分页页码来生成多个缓存的功能。 //通过第二个及后面的参数,可以实现多个缓存的生成。
$_smarty->display('demo10.tpl',$_GET['name'],$_GET['go']);
//也可以通过系统变量获取地址栏的传参
$_smarty->display('demo10.tpl',$_SERVER["REQUEST_URI"]);
3.使用is_cached()函数 页面第一次运行是模板生成了缓存页面, 而第二次运行, 虽然会运行缓存页面, 但期间的php代码还是照样执行了,为了避免资源的浪费。我们有必要在运行缓存页面的同时, 避免php代码的执行。
if (!$_smarty->is_cached('demo10.tpl',$_SERVER["REQUEST_URI"])) {
    //PHP核心代码区域
}
$_smarty->display('demo10.tpl',$_SERVER["REQUEST_URI"]);
这样PHP核心代码区域的php代码,就被屏蔽了。 4.设置局部不缓存 网站上有些地方,是必须时时控制的,比如会员的登录,退出等等。这个时候,我们又将整个页面设置了缓存,所以,我们有必要设置一下缓存页面中局部不缓存的功能。我们可以创建一个局部块, 然后注册到模板中去。 指定块包含的内容, 不缓存。 但要注意, 由于块是被缓存过的, 所以, 要设置块本身不被缓存才行, 可以在第三个参数指定为false即可。
function ncache($arr , $content) {
return $content;
}
$_smarty->register_block('nocache','ncache',false);
为了方便起见,我们可以把局部缓存块做成插件形式,但要注意,块是默认被缓存的, 需要在源代码里修改。
创建一个块插件:block.nocache.php
function smarty_block_nocache($_arr, $_content) {
    return $_content;
}
并且修改Smarty_Compiler.class.php源文件
if ($tag_command == 'nocache') {
    $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);
}
这样,{nocache}…{/nocache}包含的任何代码,都不会被缓存。 5.清理缓存 清理缓存有两种方式,一种是定时自动清理,一种是手动清理。 定时自动清理, 就是给smarty缓存设定的时间, 到了这个时间会自动清理掉旧的缓存文 件,生成新的换文件。 //可以通过不停刷新验证
$_smarty->cache_lifetime = 5; //5秒就会自动清理
//清理缓存
$_smarty->clear_all_cache(); //清理缓存文件夹
赞 (0) 打赏

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏