【Smarty】缓存技术

Smarty除了让php与html代码分离的特性外,还有一个缓存功能,它能够极大提高用户的访问速度,但是一些数据是不能够被缓存的,如用户的状态、网页的统计数据、时间等等,这需要控制好。缓存技术之所以能够提升访问速度,是因为它直接把一个渲染好的html呈现给用户看,无须每次访问都要再查一次数据表,执行一次php代码等等,既减少了数据库的读写、减少服务器负担,也提升用户访问速度。

下面用一个例子说明这个问题。如下图:


有两个时间,一个是执行了Smarty的缓存技术了,一个是禁止缓存的,可以见到每次刷新,执行了Smarty的缓存技术的部分,是读出Smarty在其上次时间间隔缓存出来的页面,一个禁止缓存的部分是再重复执行一次该模板对应php的代码。

首先在Smarty的核心php中设置使用Smarty缓存,同时设置每次缓存的间隔,我这里是Smarty.inc.php,也就是所有用到Smarty特性的php都要引用那个文件:

<?php
//首先包含Smarty类文件
include_once('/libs/Smarty.class.php');
//实例化Smarty类文件
$smarty=new Smarty();
$smarty->cache_dir="caches";//缓存文件夹可选为减轻压力
$smarty->caching=true;//关闭缓存,调试中建议关闭,默认为关闭,在实际运行的时候请打开,减轻服务器压力<br />
$smarty->cache_lifetime=10;//缓存存活时间(秒),一般没有这么短的,官方默认为120s
$smarty->template_dir="templates";//设置模版目录
$smarty->compile_dir="compiles";//设置编译目录必选
?>
这里将设置每10s缓存一次,实质上这么短是没有什么意义,这里只是为了说明问题。

核心代码是如下这三行:

$smarty->cache_dir="caches";//缓存文件夹可选为减轻压力
$smarty->caching=true;//关闭缓存,调试中建议关闭,默认为关闭,在实际运行的时候请打开,减轻服务器压力<br />
$smarty->cache_lifetime=10;//缓存存活时间(秒),一般没有这么短的,官方默认为120s

之后,由于我们对应的页面不是Smarty默认的全局缓存,所以我们要在Smarty中注册一个标签{nocache}永远不缓存的内容{/nocache},指明一些永远不参与缓存的内容。

cache.php的代码如下,用php代码date("Y-m-d H:i:s")取当前的时间,指派给模板文件cache.html中的{$date}变量。

<?php
include "Smarty.inc.php";//使用Smarty特性 
function smarty_block_nocache($param,$content,$smarty){return $content;}//部分不缓存  
$smarty->registerPlugin("function","nocache", "smarty_block_nocache");
//注册nocache块,之后可以这样用{nocache}不想缓存的内容{/nocache}
//Smarty3是用registerPlugin,Smarty2则是用register_block
$smarty->assign("date",date("Y-m-d H:i:s"));
$smarty->display("cache.html");
?>

这里核心的代码是两句,一般情况下可以直接写Smarty.inc.php中,

function smarty_block_nocache($param,$content,$smarty){return $content;}
$smarty->registerPlugin("function","nocache", "smarty_block_nocache");

这可以在Smarty注册nocache标签,当然这个标签名可以给成其它,function函数保持smarty_block_xx的形式,第二行代码的第三个参数也应该做相应的修改。

而相应的cache.html代码如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Smarty缓存测试</title>
</head>

<body>
    <p>被缓存的部分:{$date}</p>
    <p>不被缓存的部分:{nocache}{$date}{/nocache}</p>
</body>
</html>

这样能够做到上图中,页面部分缓存,部分不缓存的效果。

一般的话,仅即时更新的内容就放到{nocache}标签中即可,其余的话让它缓存去。

参看Smarty为这个cache.html所对应生成的缓存文件,可以发现被缓存的部分是直接写死的,静态内容,而不被缓存部分则是一个待执行的php代码。而实质上用户每次访问页就是这个缓存文件。然而,这对我们程序猿透明,我们只需要自己管好cache.html的即可。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值