smarty(原理概述)

转自:http://www.cnblogs.com/RightDear/archive/2012/11/06/2756218.html

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;
?>

面向对象技术实现模板功能的封装

 1 <?php
 2 class Template
 3 {
 4     //属性
 5     public $vars;                        //保存要替换的标记和数据的内容
 6     public $left_delimiter = ‘{*‘;        //左分隔符
 7     public $right_delimiter = ‘*}‘;        //右分隔符
 8     //方法
 9     public function assign($key,$value)
10     {
11
12         $this->vars[$key] = $value;
13     }
14     public function display($file)     //file表示模板名
15     {
16         $str = file_get_contents($file);    //从模板中读取多有内容,并将内容放入$str中
17         foreach ($this->vars as $key => $value) //$key 键名(模板标记) $value 值
18         {
19             $str = str_replace($this->left_delimiter.$key.$this->right_delimiter, $value, $str);
20         }
21         echo $str;
22         //file_put_contents(‘bak.html‘, $str);
23     }
24 }
25 ?>

注意:assign(‘name’,’zhangsan’);这句的时候其实还没有进行数据替换,而是把传入的数据保存在vars[]中,当display的时候才进行数据替换

smarty的处理过程:

1、 smarty将php源文件,首先编译成中间文件

2、 如果启用缓存,再根据编译文件生成缓存文件

3、 之后每次访问都会访问编译文件

如果启用缓存文件而且有缓存文件并且缓存文件没有过期,则直接访问缓存文件

(先不考虑缓存的时候的流程)

编译文件里时间戳记录模板文件修改时间,如果模板被修改过就可以检测到,然后重新编译

(编译是把静态内容保存起来,动态内容根据传入的参数不同而不同)

读取编译文件省去了读取模板文件,和字符串替换的时间,所以可以更快

第一次请求demo.php时候编译,产生编译文件,在编译文件里

第二次请求demo.php的时候,判断模板文件是否改变,如果模板文件已改变,那么去读取模板文件,然后再编译,如果没有改变,则去读取编译文件,编译文件最终输出;

缓存默认是关闭的;缓存是把数据彻底的存在缓存文件里,直到缓存文件过期才会重新来缓存;所以说smarty在一些实时性特别强的网站里不是特别合适;

考虑缓存:

在smarty程序里,判断是否开启了缓存文件,并且缓存文件没有过期,,就去找缓存文件

如果没有开启缓存文件,就去判断模板文件,如果缓存文件已过期,也是去判断模板文件。

时间: 2024-10-17 08:43:11

smarty(原理概述)的相关文章

&#8203;DNS原理概述及使用

DNS原理概述及使用 =============================== DNS原理 Bind的安装配置及正反向解析 主从复制 子域授权及转发 Acl及view =============================== 一.DNS原理 每个IP地址都可以有一个主机名,主机名由一个或多个字符串组成,字符串之间用小数点隔开.有了主机名,就不要死记硬背每台IP设备的IP地址,只要记住相对直观有意义的主机名就行了.这就是DNS协议所要完成的功能.通过主机名,最终得到该主机名对应的IP地

Web服务器工作原理概述

Web服务器工作原理概述 很多时候我们都想知道,web容器或web服务器(比如Tomcat或者jboss)是怎样工作的?它们是怎样处理来自全世界的http请求的?它们在幕后做了什么动作?Java Servlet API(例如ServletContext,ServletRequest,ServletResponse和Session这些类)在其中扮演了什么角色?这些都是web应用开发者或者想成为web应用开发者的人必须要知道的重要问题或概念.在这篇文章里,我将会尽量给出以上某些问题的答案.请集中精神

高可用(HA)集群原理概述

一.高可用集群(High Availability Cluster) 集群(cluster)就是一组计算机,它们作为一个整体向用户提供一组网络资源.每一个单个的计算机系统都叫集群节点(node).随着业务的增长,集群通过添加新的节点,满足资源的高可扩展性. 计算机硬件和软件易错性不可避免,这样在节点上的服务会不可避免的中断.高可用集群的出现是为保证即使节点失效,而服务能不中断. 高可用集群在一组计算机中,采用主备模式,主节点提供服务,备节点等待:一旦,主节点失效,备节点无需人工的无缝取代主节点提

支付方式(1)——支付原理概述

对于商品的支付,首先要确认下整个流程: 标注:同步返回(return_url)和异步返回(notify_url)的区别 同步返回处理(return_url):是一种可视化的返回,ie页面跳转通知,只要支付成功,支付宝通过get方式跳转到这个地址,并且带有参数给这个页面. 客户获取信息受到买家操作的影响.如果买家支付完成后客户服务器响应比较慢,买家在显示支付宝提示的“即时到账支付成功“时关闭页面,那么客户网站是获取不到信息,我们这边称为” 掉单“. 而且这个返回处理是一次性调取,即支付成功后才调取

RHCS集群原理概述

一. 什么是RHCS RHCS是Red Hat Cluster Suite的缩写,也就是红帽集群套件,RHCS是一个能够提供高可用性.高可靠性.负载均衡.存储共享且经济廉价的集群工具集合,它将集群系统中三大集群架构融合一体,可以给web应用.数据库应用等提供安全.稳定的运行环境. 更确切的说,RHCS是一个功能完备的集群应用解决方案,它从应用的前端访问到后端的数据存储都提供了一个行之有效的集群架构实现,通过RHCS提供的这种解决方案,不但能保证前端应用持久.稳定的提供服务,同时也保证了后端数据存

关于静电喷涂工艺原理概述

静电喷涂工艺原理如下:   静电喷粉设备把粉末涂料喷涂到工件的表面,在静电作用下,粉末会均匀的吸附于工件表面,形成粉状的涂层:粉状涂层经过高温烘烤流平固化,变成效果各异的最终涂层:喷涂效果在机械强度.附着力.耐腐蚀.耐老化等方面优于喷漆工艺.一.表面预处理: 它的前处理工艺质量好坏可以直接影响粉末涂膜质量,如果前处理不好,就会造成涂膜易脱落,鼓泡等现象.所以前处理工作必须予以重视.1        对于板金冲压件可采用化学前处理法.即可:去油→去锈→清洗→磷化(或纯化)等.大部份锈蚀或者表面较厚

mysql之 MySQL 主从基于 GTID 复制原理概述

一. 什么是GTID ( Global transaction identifiers ):MySQL-5.6.2开始支持,MySQL-5.6.10后完善,GTID 分成两部分,一部分是服务的UUid,UUID保存在mysql数据目录的auto.cnf文件中,这是一个非常重要的文件,不能删除,这一部分是不会变的.另外一部分就是事务ID了,随着事务的增加,值一次递增,如下图+---------------+----------+--------------+------------------+-

Linux的七个运行级别原理概述

所谓运行级别,简单点来说,运行级别就是操作系统当前正在运行的功能级别.级别是从0到6,具有不同的功能.这些级别定义在/ect/inittab文件中.这个文件是init程序寻找的主要文件,最先运行的服务是那些放在/ect/rc.d目录下的文件. 一.Linux的运行级别: Linux下的7个运行级别: 0:系统停机状态,系统默认运行级别不能设置为0,否则不能正常启动,机器关闭. 1:单用户工作状态,root权限,用于系统维护,禁止远程登陆,就像Windows下的安全模式登录. 2:多用户状态,没有

smarty原理

<?php class smarty { public $leftlimit = "<{"; //定义左分隔符 public $rightlimit = "}>"; // 定义右分隔符 public $attr; //存放smarty里面的变量信息的数组 //注册变量(将变量存放到arrt数组里面去) function assign($k,$v) { $this->attr[$k]=$v;//往数组里面存放一个值v,索引是k } //显示模板