smarty之缓存机制
当smarty开启缓存时,当tpl文件内容改变时,则缓存页面会重新生成
test.php:
<?php
date_default_timezone_set('asia/shanghai');
header("Content-type: text/html; charset=utf-8");
require 'smarty/Smarty.class.php';
$_smarty = new Smarty();
$_smarty->caching = true; $_smarty->assign('name','测试缓存'); $_smarty->display('test.tpl');
?>
test.tpl:
<html>
<body> {$name} {$smarty.now|date_format:"%Y-%m-%d %H %M %S"}
当此tpl文件内容改变时,则会 重新生成新缓存
</body>
</html>
当smarty开启缓存时,当tpl文件内容不改变,而test.php文件改变时,则不生成缓存,虽然此种情况下不生成缓存,但是test.php文件里的内容也被执行了
test.php:
<?php
date_default_timezone_set('asia/shanghai');
header("Content-type: text/html; charset=utf-8");
require 'smarty/Smarty.class.php';
$_smarty = new Smarty();
$_smarty->caching = true; $_smarty->assign('name','修改test.php的文件内容则不会生成缓存,虽然不生成缓存,但是test.php文件里的内容还是执行了,只是此行的assign函数没有重新解析!');
echo 123;//此行执行了
$_smarty->display('test.tpl');
?>
test.tpl:
<html>
<body> {$name} {$smarty.now|date_format:"%Y-%m-%d %H %M %S"} </body>
</html>
当smarty开启缓存时,tpl文件内容不变,而test.php中的$_smarty->display('test.tpl',$_SERVER["REQUEST_URI"]);里的display方法里的第二个参数值改变时,则test.php里的display方法会重新执行,则会重新生成缓存文件,并且生成的是新的缓存文件名如:一个页面有多篇文章的情况下:
http://website/index.php?p=1
http://website/index.php?p=2
<?php
date_default_timezone_set('asia/shanghai');
header("Content-type: text/html; charset=utf-8");
require 'smarty/Smarty.class.php';
$_smarty = new Smarty();
$_smarty->caching = true; $_smarty->assign('name','当参数值改变时则会重新生成一个新的缓存文件'); $_smarty->display('test.tpl',$_SERVER["REQUEST_URI"]);
?>
使用is_cached()函数,这种是最常用的.即访问test.php时,当url地址不变,则直接执行缓存文件,而不再执行test.php里面的业务逻辑
<?php
date_default_timezone_set('asia/shanghai');
header("Content-type: text/html; charset=utf-8");
require 'smarty/Smarty.class.php';
$_smarty = new Smarty();
$_smarty->caching = true;
//is_cached是否存在缓存
//如果存在缓存,就不执行if语句里面的代码,否则就执行
if(!$_smarty->is_cached('test.tpl',$_SERVER["REQUEST_URI"])) {
echo '如果test.php的url不变,即使此if语句内的业务逻辑代码改变,也不会被执行,而是直接执行缓存文件';
} $_smarty->assign('name','测试缓存');
$_smarty->display('test.tpl',$_SERVER["REQUEST_URI"]);
?>
设置局部不缓存,比如,时间
可以创建一个局部块,然后注册到模板中去,指定块包含的内容不缓存,由于块是被缓存过的,所以要设置块本身不被缓存才行, 可以在第三个参数指定为false才可以即:(测试时要清理编译文件和缓存文件)
test.php:
<?php require 'smarty.inc.php';
function no_cache($_arr,$_content) {
return $_content;
}
$_smarty->register_block('nocache','no_cache',true); $_smarty->display('test.tpl',$_SERVER["REQUEST_URI"]);
?>
test.tpl:
<html>
<body>
{nocache}
{$smarty.now|date_format:"%Y-%m-%d %H %M %S"}
{/nocache}
</body>
</html>
为了方便起见,可以把局部缓存块做成插件形式,但要注意,块是默认被缓存的,需要在Smarty_Compiler.class.php里修改
1,在plugins文件夹下注册块文件(函数):block.nocache.php
function smarty_block_nocache($params, $content)
{
return $content;
}
2,查找$this->_plugins['block'][$tag_command] = array($plugin_func, null, null, null, true);并修改成(714行代码处):
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);
}
smarty之缓存机制的更多相关文章
- 全面剖析Smarty缓存机制一[三种缓存方式]
今天主要全面总结下Smarty模板引擎中强大的缓存机制,缓存机制有效减少了系统对服务器的压力,而这也是很多开发者喜欢Smarty的原因之一,由于篇幅较大,便于博友阅读,这篇文章将剖析Smarty缓存的 ...
- 全面剖析Smarty缓存机制二[清除缓存方法]
前段时间,写了一篇 Smaryt缓存机制的几种缓存方式 ,详细介绍了三种缓存方式:全局缓存.部分缓存.局部缓存,以及通过is_cache()判断是否存在缓存来进行缓存生成.本来这篇早该完成,由于时间关 ...
- 【腾讯Bugly干货分享】彻底弄懂 Http 缓存机制 - 基于缓存策略三要素分解法
本文来自于腾讯Bugly公众号(weixinBugly),未经作者同意,请勿转载,原文地址:https://mp.weixin.qq.com/s/qOMO0LIdA47j3RjhbCWUEQ 作者:李 ...
- MyCat源码分析系列之——BufferPool与缓存机制
更多MyCat源码分析,请戳MyCat源码分析系列 BufferPool MyCat的缓冲区采用的是java.nio.ByteBuffer,由BufferPool类统一管理,相关的设置在SystemC ...
- Java三大框架之——Hibernate中的三种数据持久状态和缓存机制
Hibernate中的三种状态 瞬时状态:刚创建的对象还没有被Session持久化.缓存中不存在这个对象的数据并且数据库中没有这个对象对应的数据为瞬时状态这个时候是没有OID. 持久状态:对象经过 ...
- Spring缓存机制的理解
在spring缓存机制中,包括了两个方面的缓存操作:1.缓存某个方法返回的结果:2.在某个方法执行前或后清空缓存. 下面写两个类来模拟Spring的缓存机制: package com.sin90lzc ...
- hibernate缓存机制(转)
原文出处:http://www.cnblogs.com/wean/archive/2012/05/16/2502724.html 一.why(为什么要用Hibernate缓存?) Hibernate是 ...
- [转]Android ListView 与 RecyclerView 对比浅析—缓存机制
从源码角度剖析ListView 与 RecyclerView 缓存机制的不同 https://zhuanlan.zhihu.com/p/23339185 原文地址:http://dev.qq.com/ ...
- HTML5应用缓存机制
首先先上一张图: 用360浏览器的用户对这张图应该都是耳熟能详了吧,没错,当网络不通畅时使用360浏览器,便会有这张图弹出来.为什么没有网络还能弹出这一副画面呢?这就关乎HTML5的应用缓存机制了. ...
随机推荐
- webpack配置反向代理
devServer: { contentBase: path.resolve(__dirname, "../dev"), compress: true, port: ,//本身的端 ...
- 怎么实现超大文件上传 2-3GB
1 背景 用户本地有一份txt或者csv文件,无论是从业务数据库导出.还是其他途径获取,当需要使用蚂蚁的大数据分析工具进行数据加工.挖掘和共创应用的时候,首先要将本地文件上传至ODPS,普通的小文件通 ...
- 【BZOJ5092】分割序列(高维前缀和)
题意:对于一个长度为n的非负整数序列b_1,b_2,...,b_n, 定义这个序列的能量为:f(b)=max{i=0,1,...,n}((b_1 xor b_2 xor...xor b_i)+(b_{ ...
- 三维显示插件——C++
Qt 3D 构建自己的C/C++插件开发框架——系列:https://blog.csdn.net/chgaowei/article/details/4545211 如何使用Qt 3D开发3D场景程序: ...
- Anaconda-navigator 打不开的解决方法(亲测有效!)
本文链接:https://blog.csdn.net/qq_42489092/article/details/92208822method_1:每当你打不开应用时,不妨试一下:用管理员身份运行 请用管 ...
- Alexa TOP 100万的域名列表
Alexa是一家专门发布网站世界排名的网站,是亚马逊公司的一家子公司.Alexa每天在网上搜集多达几十亿的网址链接,而且为其中的每一个网站进行了排名. Alexa通过Alexa官网查询好像TOP 50 ...
- Ecipse代码调试
1.设置断点 2.启动调试 在代码空白处中右击,选择Debug as —>1 Java Application 快捷键 表示当前实现继续运行直到下一个断点,快捷键为F8. 表示打断整个进程 表示 ...
- principal components analysis 主成份分析
w http://deeplearning.stanford.edu/wiki/index.php/主成份分析 主成分分析(PCA)及其在R里的实现 - jicf的日志 - 网易博客 http:// ...
- 将String转化成Stream,将Stream转换成String, C# Stream 和 byte[] 之间的转换(文件流的应用)
static void Main( string[] args ) { string str = "Testing 1-2-3"; //convert string 2 strea ...
- After laptop installed fedora23
en_US.UTF-8和 zh_CN.UTF-8 en和zh是语言, US和CN是分地区. 两者的编码UTF-8都差不多.只是用语言环境来表示时间, 数字, 温度等的不同 自定义程序快捷键: 在选中条 ...