smarty局部缓存

来源:互联网 发布:redis java 使用 编辑:程序博客网 时间:2024/05/13 02:58
 

使用smarty设计网站前台时,使用混存可以大大减轻程序与服务器的交互,提高速度。对于那种访问比较多的站点尤为重要。

使用的过程中发现,如果全局缓存了,其实就等于整站静态化,那到不如就直接静态化算了,还免得第一次访问出现错误生成错误的缓存或者其它的状况出现。

整站缓存后空间是个问题,一个html随时可能达到10~30k。随着信息的增加,有些草根站长明显吃不消啦,空间就是金钱啊。

部分缓存可以解决这个问题,可以将共同的部分缓存了,将变化的部分不设置缓存,那不就行了吗?对于一部分来说,这是节省空间的好办法,而且速度也有一定提高。

但是变化部分一般是需要访问数据库的,这样缓存就省空间但不能最有效减轻服务器负担。所以情况并不能全部适用。我在本站处理时,对这部分信息进行缓存(XML/YAML),能有效保存信息,而且不会产生过多的HTML代码,到时候直接读文件缓存就OK了。如果你怀疑读文件和数据库的速度,那请测试一下。

 

下面例子是从网上抄写的,网上很多类似的转载,明显有错误就是没有进行is_cache()判断,那不就php脚本还是全部跑一遍,就是不需要渲染到html罢了。效率不能极大利用。自己可以进行改进一下。

 

局部缓存示例:

smarty_config.php

<?php
include_once(WEB_ROOT."/libs/Smarty.class.php"); //包含smarty类文件
$smarty = new Smarty(); //建立smarty实例对象$smarty
$smarty->template_dir=WEB_ROOT; //设置模板目录
$smarty->compile_dir =WEB_ROOT."/templates_c"; //设置编译目录
$smarty->cache_dir =WEB_ROOT."/cache"; //设置缓存目录
$smarty->cache_lifetime = 60*60; //设置缓存时间(s)
$smarty->caching = true; //设置缓存方式
//----------------------------------------------------
//左右边界符,默认为{},但实际应用当中容易与JavaScript
//相冲突,所以建议设成<{}>或其它。
//----------------------------------------------------
$smarty->left_delimiter = "<{";
$smarty->right_delimiter = "}>";
?>

test.php

<?php
include('inc/inc_init.php');
include('inc/smarty_config.php');
function smarty_block_dynamic($param, $content, &$smarty) 
{ 
    return $content; 
}

$smarty->register_block('dynamic', 'smarty_block_dynamic', false); 

        $smarty->assign("nowTime",date("Y-m-d H:i:s"));
   $smarty -> assign('randnum',rand()); 

$smarty ->display('test.html');
?>

test.html

<div align='center'> 
Page created: <{"0"|date_format:"%D %H:%M:%S"}>

<{dynamic}> 
Now is: <{"0"|date_format:"%D %H:%M:%S"}> 
... do other stuff ... 
<{$nowTime}> 
<{$randnum}> 
<{/dynamic}> 
<br /><{$nowTime}> 
</div>

原创粉丝点击