您现在的位置:首页 > 教案格式 > 正文

变量之间的相关关系 ThinkTemplate模板引擎的设计和使用方法(2)

2017-12-22 17:04 网络整理 教案网

执行速度

要准确判断执行速度,首先要了解解释型模板引擎和编译型模板引擎的区别。

所谓解释型就是每次将模板内容读入内存,并通过正则等方式分析字符串后对预置的标签进行替换,每次加载模板都需要重复这个过程,tinybutstrong就属于这种类型。而编译型模板引擎是在第一次执行模板文件的时候进行一次编译(相当于一次解释分析过程),然后生成一个编译后的缓存文件,下次执行的时候就可以直接执行缓存文件,无需再次编译。所以,在速度上面,编译型模板引擎在第一次运行模板的时候速度会比解释性模板引擎略微缓慢,是因为有严格的编译(包括生成缓存文件)过程,这个过程根据模板引擎的复杂程度和模板页面标签多少速度有所不同,而当第二次执行的时候,因为最耗时的过程已经跳过了,编译型模板引擎的优势就提现出来了。这也是编译原理中所谓的“空间换时间”例子。目前大多数的模板引擎都采用编译型,但是,是否为编译型和模板功能并没有直接关系,tinybutstrong虽然是解释型但是功能也相当强大。

ThinkTemplate也一样属于编译型模板引擎,具备动态生成缓存文件的能力,无论是模板文件修改或者是缓存文件被删除,系统都会重新生成缓存文件。你还可以设置模板缓存的有效时间,如每隔10分钟重新编译模板文件。并且在编译模板文件的过程中,如果发现存在很多相同的标签,ThinkTemplate并不会重复解析,而是会读取解析缓存。因此,无论在解析还是执行上面,效率都是比较高的。

模板功能

模板引擎的一个重要因素就是模板标签的功能。Smarty模板引擎以功能以强大而著称,标签的易用性和完善性也是模板引擎的关键因素之一,最基本的功能包括注释、变量输出、条件控制、包

含文件,而这些功能的体现都是借助于一系列的模板标签。这一部分是设计模板引擎的关键也是工作量比较大的地方。目前见到的模板引擎标签大致分为特定标签和XML标签两种类型。

特定标签通常是比较常见的类型,由模板引擎自身定义的一系列标签,用来满足变量输出和控制的需要,通常具有私有化规则,标签类型各不相同,在ThinkTemplate里面,我们称之为普通模板标签。例如,Smarty中就是使用 {$varname} 来输出PHP的$varname 变量,TinyButStrong则采用[var.tbl.item1]的方式输出变量,我也曾看到过其它形式的输出标签,例如{:=varname} ,当然有些模板引擎是设计为可以定义起始标签的。ThinkTemplate的普通模板标签以“{”和“}”作为开始和结束标识,和Smarty等大多数模板引擎是一致的,也支持起始标签定义,例如可以在项目配置文件中配置成采用 [$varname] 来输出模板变量。

ThinkTemplate中的变量输出也具有Smarty的变量组合调节器的功能,例如{$articleTitle|upper|spacify} 。其中调节器方法可以是系统函数或者自定义函数,在ThinkTemplate中还可以设置禁止在模板中使用的函数。也可以支持输出多级对象属性或者数组的输出,例如:{$vo.name.sub} {$array[‘name’][‘sub’]}。

除了输出模板变量之外,模板引擎通常都会提供一个特殊的标签输出方式用来输出一些常量和系统变量,在ThinkTemplate采用 $Think 来输出一些无需赋值的特殊或者内建变量,和Smarty的$smarty保留变量类似。

和其他的模板引擎不同,ThinkTemplate的特定标签仅仅是用于变量输出功能,而把控制功能和复杂的标签功能放到XML模板标签里面。XML模板引擎在Java领域里面是非常常见的,在PHP模板引擎领域似乎并不多见,但是ThinkTemplate在实现自身的特定标签外,还有效地借鉴了Java的标签库技术,实现了XML模板标签支持,并且允许自定义标签库。两种标签方式的结合使用,可以让模板定义更加灵活,这也正是ThinkTemplate模板引擎的特色。