smarty缓存原理讲解(php缓存篇)
来源:互联网 发布:vscode 撤销快捷键 编辑:程序博客网 时间:2024/05/21 11:31
使用smarty主要是为了实现逻辑和外在内容的分离;
特点:
1、速度快(因为第二次执行的时候使用第一次执行时生成的编译文件)
2、缓存技术(正是因为缓存技术,使得smarty模板技术不太适合那些对于实时性更新要求比较高的,比如股票信息)
3、插件技术
4、缓存技术
5、语句自由静态页面技术实际上是以空间换时间的技术:
http://localhost/news.php?id=8比如这个是某门户网站的新闻页面,
很多人访问,每次都要去数据库里查询,可以再第一次访问的时候生成一个html页面,以后的访问者都是访问这个静态页面)
数据库--->静态页面
分析模板技术:是利用php语言读取模板文件完成字符串替换掉的过程
详解代码如下:
html页面:<body><font color = 'red'>{id}</font><br><font color = 'green'>{name}</font><br><font color = 'bule'>{age}</font><br></body>后台逻辑部分//$id=8;$name='zhangsan';$age = 12;$str = file_get_contents('demo1.html');//模板文件的所有内容$str = str_replace('{id}', $id, $str);//替换id$str = str_replace('{name}', $name, $str);$str = str_replace('{age}', $age, $str);echo $str;
面向对象技术实现模板功能的封装
<?phpclass Template{ //属性 public $vars; //保存要替换的标记和数据的内容 public $left_delimiter = '{*'; //左分隔符 public $right_delimiter = '*}'; //右分隔符 //方法 public function assign($key,$value) { $this->vars[$key] = $value; } public function display($file) //file表示模板名 { $str = file_get_contents($file); //从模板中读取多有内容,并将内容放入$str中 foreach ($this->vars as $key => $value) //$key 键名(模板标记) $value 值 { $str = str_replace($this->left_delimiter.$key.$this->right_delimiter, $value, $str); } echo $str; //file_put_contents('bak.html', $str); }}?>
注意:assign(‘name’,’zhangsan’);这句的时候其实还没有进行数据替换,而是把传入的数据保存在vars[]中,当display的时候才进行数据替换
smarty的处理过程:
1、 smarty将php源文件,首先编译成中间文件
2、 如果启用缓存,再根据编译文件生成缓存文件
3、 之后每次访问都会访问编译文件
如果启用缓存文件而且有缓存文件并且缓存文件没有过期,则直接访问缓存文件
(先不考虑缓存的时候的流程)
编译文件里时间戳记录模板文件修改时间,如果模板被修改过就可以检测到,然后重新编译
(编译是把静态内容保存起来,动态内容根据传入的参数不同而不同)
读取编译文件省去了读取模板文件,和字符串替换的时间,所以可以更快
第二次请求demo.php的时候,判断模板文件是否改变,如果模板文件已改变,那么去读取模板文件,然后再编译,如果没有改变,则去读取编译文件,编译文件最终输出;
缓存默认是关闭的;缓存是把数据彻底的存在缓存文件里,直到缓存文件过期才会重新来缓存;所以说smarty在一些实时性特别强的网站里不是特别合适;
重新编译的标准
if(!file_exists(com_aa.php)||filetime(aa.tpl)>filetime(com_aa.php))
缓存的配置
$smarty->cache_dir="/caches/";//缓存目录
$smarty->caching=true;//开启缓存,为flase的时候缓存无效
$smarty->cache_lifetime=60;//缓存时间(单位 秒)
缓存的使用
$smarty->display('模板文件',缓存id);//创建带ID的缓存
$smarty->clear_all_cache();//清除所有缓存
$smarty->clear_cache('模板文件');//清除指定模板文件的缓存
$smarty->clear_cache('模板文件',缓存id);//清除指定id的缓存
第一种缓存
生成的编译文件是templates_c目录下的动态页面文件,实际上就是一个php文件
例如:com_aa.php
第二种缓存
生成的编译文件是caches目录下的静态页面文件,实际上是一个html静态文件
模板文件发生变化的话,两种缓存模式都会重新编译,致使编译文件改变;
assign进模板文件的标签标量的值发生变化的话,静态页面缓存内容在缓存期内不会改变
局部缓存:一个模板文件一部分缓存,另外一部分数据实时更新。
insert函数类似于include函数,不同之处是insert所包含的内容不会被缓存,每次调用该模板都会
重新执行该函数。
cache1.tpl
//写在模板文件中的代码
{insert name="mytime"}
- smarty缓存原理讲解(php缓存篇)
- php+smarty ,smarty 缓存
- smarty编译,缓存原理
- php,smarty 缓存操作
- php smarty 缓存
- php smarty 缓存 2
- php smarty 缓存总结
- php smarty 删除缓存
- php,smarty 缓存操作
- PHP 中使用 Smarty 之九:缓存技术(Smarty 终结篇)
- php+Smarty的缓存操作
- smarty缓存
- smarty缓存
- smarty缓存
- smarty缓存
- smarty缓存
- Smarty缓存
- smarty缓存
- 使用Broadcast Receiver
- 深度学习与计算机视觉(11)_基于deep learning的快速图像检索系统
- 分区分表心得与整理
- 检测Mysql是否宕机,若宕机再启动脚本
- 正则表达式30分钟入门教程
- smarty缓存原理讲解(php缓存篇)
- 线程
- JBoss Web和 Tomcat的区别
- Java NIO系列教程(六) Selector
- runtime 操纵 属性 操纵 方法 为所欲为
- 使用拦截器实现通用的登陆验证和日志记录
- Js实现360浏览器判断刷新或关闭
- LeetCode 21. Merge Two Sorted Lists
- 导入(import)那点事