smarty课程---smarty的处理过程是怎样的
smarty课程---smarty的处理过程是怎样的
一、总结
一句话总结:编译文件里时间戳记录模板文件修改时间,如果模板被修改过就可以检测到,然后重新编译
1、 smarty将php源文件,首先编译成中间文件
2、 如果启用缓存,再根据编译文件生成缓存文件
3、 之后每次访问都会访问编译文件
如果启用缓存文件而且有缓存文件并且缓存文件没有过期,则直接访问缓存文件
1、smarty的编译文件,缓存文件的特点是什么?
编译文件是把源文件中的标签换成了php代码
缓存文件是编译文件生成的全静态的html文件
2、在什么情况下缓存文件会发生变化(刷新)?
缓存文件过期
模板文件发生改变
考虑缓存:
在smarty程序里,判断是否开启了缓存文件,并且缓存文件没有过期,就去找缓存文件
如果没有开启缓存文件,就去判断模板文件,如果缓存文件已过期,也是去判断模板文件。
3、smarty如何开启缓存?
a、直接在配置文件中
b、在index.php入口文件中
$s=new Smarty();
$s->cacheing=true;
4、静态缓存页面技术的实质是什么?
静态缓存页面技术实际上是以空间换时间的技术:
http://localhost/news.php?id=8比如这个是某门户网站的新闻页面,
很多人访问,每次都要去数据库里查询,可以再第一次访问的时候生成一个html页面,以后的访问者都是访问这个静态页面)
数据库--->静态页面
5、用户访问smarty的时候是访问的哪个文件?
如果缓存文件没有过期。默认访问的是缓存文件
6、smarty不适合的网站是哪种?
缓存默认是关闭的;缓存是把数据彻底的存在缓存文件里,直到缓存文件过期才会重新来缓存;所以说smarty在一些实时性特别强的网站里不是特别合适;
二、smarty(原理概述)
smarty(模板引擎,模板技术)
使用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;
?>
面向对象技术实现模板功能的封装
<?php
class 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时候编译,产生编译文件,在编译文件里
第二次请求demo.php的时候,判断模板文件是否改变,如果模板文件已改变,那么去读取模板文件,然后再编译,如果没有改变,则去读取编译文件,编译文件最终输出;
缓存默认是关闭的;缓存是把数据彻底的存在缓存文件里,直到缓存文件过期才会重新来缓存;所以说smarty在一些实时性特别强的网站里不是特别合适;
考虑缓存:
在smarty程序里,判断是否开启了缓存文件,并且缓存文件没有过期,,就去找缓存文件
如果没有开启缓存文件,就去判断模板文件,如果缓存文件已过期,也是去判断模板文件。
参考:smarty(原理概述) - RightDear - 博客园
https://www.cnblogs.com/RightDear/archive/2012/11/06/2756218.html
最新文章
- bzoj4264: 小C找朋友
- 轮式移动机器人QBot的使用
- stc89c52开发板遥控器解码 红外线发射 内置 eeprom 存储 串口显示编码
- system v和posix的共享内存对比 &; 共享内存位置
- Jfinal中定时器的初步探索(一)
- Windows DDB和DIB技术应用(3)--图元外边矩形检测
- cocos2d-实现读取.plist文件(使用数组CCArray)
- 【JS学习笔记】函数传参
- ubuntu环境下安装Tomcat
- Python 迭代器和列表解析
- mvc 下的 signalR使用小结
- Oracle 11gR2 用exp无法导出空表解决方法
- HTTP 500 Invalid bound statement错误
- 调用 微信接口报错 {";errcode";:48001,";errmsg";:";api unauthorized, hints: [ req_id: 1QoCla0699ns81 ]";}
- Sprint最后一天
- 关于less在DW中高亮显示问题
- react组件更新swiper
- 【RL系列】马尔可夫决策过程——状态价值评价与动作价值评价
- 【OCP-12c】CUUG 071题库考试原题及答案解析(24)
- 【C++对象模型】使用gcc、clang和VC++显示C++类的内存布局
热门文章
- 影像服务——加载CESIUM自带的影像服务
- go语言简单的执行shell命令
- Union File System
- Camera Calibration 相机标定:Opencv应用方法
- hdu5249 Tricks Device(网络流最大匹配)
- 11_HTML5_Local_Storage本地存储
- github如何多人开发一个项目
- 86.express里面的app.configure作用
- Codeforces 667C Reberland Linguistics 记忆化搜索
- GridView 绑定 ObjectDataSource