PHP工程中的模板应用,是进行中型乃至大型项目中建议采用的处理表现层的好办法。但是具体到模板的实施,采用何种现有的模板技术却需要进行一番比较。 X"59`Yh
PHP世界中比较受关注的模板处理有PHPLIB Template和FastTemplate两种,我们对技术的易用性和速度进行了评测--想知道结果吗? g
{wPw
j`M<M[C*4N
事情的起因:你用过FastTemplate吗? %pKs- n`
对于PHP工程中的模板应用,其实我和我的同事们已经在许多的项目中接触过--关于它的好处,我想无论是在实际开发阶段还是上升到设计模式的角度都已经有很多"前辈先哲"讨论过了。就项目实施而言,在一些中型甚至大型的项目中,有效的将HTML(还有其他文本形式的表现层)和PHP代码分开,不仅在开发阶段可以分别提高界面设计人员和应用程序编写人员的工作效率,更会给项目的测试和维护带来巨大的便利。 h0QQP
AQGE(%X
但是--本文的目的不是讨论模板的优缺点,也不是作为指导性的教程讲授如何在PHP项目中使用模板,而是以应用的视角比较两种PHP世界中最为流行的模板处理方式(其实只不过是两种模板类):PHPLIB Template和FastTemplate。 &
b2(Y4
aVL%-Il}
其实我一直都在"安静"的使用着PHPLIB Template--很稳定而且看上去速度也不错,以至于我并不想再去不安的寻找可能更好的替代品--虽然我也知道这个地球上还有FastTemplate这样的东西(而且还在Perl的世界中大名鼎鼎)。直到有一天,有一个同事问我:"不知道FastTemplate怎么样?为什么我们不试试FastTemplate呢?" xH-k~#
(?wKBUi
"好吧,就让我们试试!"不过作为一个稳妥的方法,在任何新的模式或者方法引入项目之前,最好能够更加全面的了解它,以及找到一个或者几个足够说服自己和同事去采用它的理由--对于FastTemplate也不例外。 Mo
r-$a8
#`wfl9tj
主角出场:了解PHPLIB Template以及FastTemplate R.$Y1=U6
前面已经说过,我已经使用PHPLIB有一段时间了--我想屏幕前的你也许和我一样,也对这个优秀的工具类库印象很深吧!同样,当我开始寻求模板的解决办法时,很自然的就会在最接近身边的工具箱里搜寻,于是我找到了PHPLIB中的Template类。在最初的很快浏览完它提供的API之后(当然还得感谢PHPLIB详尽的文档),我就开始了使用它的历程--直到现在。 D"aQbQP
6j_
(ZJ_&8C#
好了,讲了这么多(也许你会觉得都是FastTemplate的坏话),这个回合的胜利者很明显:PHPLIB Template,尤其是你同时在使用PHPLIB的其他类时,这样的技术易用性更加明显(你将不会对这些出自同一个开发小组的API感到陌生)。 b`=rd 4cpU
.!! yj,bQz
回合二:处理速度 o!d0
也许这才是很多人最关注的部分--在这个回合中,我们会采用两种模板处理的方式:一种是常规的分析、替换,另一种是对区块的解析、替换--同时这样的两种方式也是在实际系统中应用最多的:前者是一般的页面处理,后者是关于数据库内容的输出处理。同时,由于两种模板类采用的模板文件的格式基本相同,使得我们可以提供几乎一致的模板文件分别供两种模板解析,更增加了测试的可信度。 5$w1[}UUd
ABf#!G
开展这样的速度测试之前会拟定一个测试方案,简单说来就是对于两种处理方式分别编写两个PHP测试页面,同时有一个控制测试的页面多次调用这两个页面并记录时间供采集测试数据。(如果有兴趣你还可以参考以下详细的测试方案,也许会对你深入了解这次测试有所帮助) ]|(?i ,p
RUO6Co-
小结--在整个测试系统完成之后,我们应该能够得到/test目录中如下的文件清单: IS~oyFS
^.7xu/T
(有点复杂的测试方案) 7dIDKx
首先是确定测试的硬件和软件环境--硬件肯定是自己的机器了,Intel Celeron 733MHz, 256M RAM,40G HDD;软件平台中OS为Win2K Pro,Web服务器为Apache+PHP,且以模块方式运行。 \:S8mDI^s
d{jl&:
其次是规划这次测试的系统--当然先在Web服务器的文档根目录下开一个tpl_test的新目录用以放置这个测试的所有文件;然后在/tpl_test下建立include目录以存放两个模板类文件(我们测试的核心,以.inc.php为文件扩展名)以及一个测试类文件(包括了计时和记录日志以及读取日志并分析等功能,以.inc.php为文件扩展名)和一个数据文件(为区块解析的测试做准备,主要包含了一个二维数组,同样以.inc.php为文件扩展名),建立ihtml目录存放使用的模板文件(需要被解析的模板文件,以.ihtml为文件扩展名),建立logs目录存放测试产生的日志(后面就是发现,其实测试的数据就是由对这些日志的分析得到的,以.log为文件扩展名)。当然,两种模板的处理PHP文件就放在/test目录下。这次测试最关键的一点是,还需要建立一个PHP文件,对以上提到的负责模板处理的文件进行数次调用:比如一个文件fast_test.php是采用FastTemplate解析模板的,而phplib_test.php是采用PHPLIB Template解析的,那么这个得出结果的PHP文件就负责多次以HTTP的方式请求以上的两个页面以获得测试数据。 c0~'5Mlp
uWQ.h ,
选择待解析的模板和PHP程序编写--因为两种模板处理方式对于模板文件本身的格式要求几乎一致(比如待替换变量都采用{VAR}的形式等等),因此可以尽量保证同一测试中两者选用的模板尽可能相同以谋求测试的最大公正性;同时在前文提到,为模拟现实系统中常用的两种模板应用:一般的页面处理和对数据库内容的输出处理,测试使用的模板文件也分成两种:一种是普通的带有一些待替换变量的模板文件,另一种是带有区块的需要根据应输出的内容反复替换的模板文件。同样对于这两种模板文件,也需要分别编写两种不同的PHP文件进行解析。 =n&83MYX
P'';F}NwfX
测试方法--在浏览器中向/test/result.php提出请求,需要带参数type=[simple|complex],在返回的结果中即可看到两种模板在简单或者复杂模式下的测试结果。 V00zk`PH
H(| v
#{a <{HX
(C|%@6 1S
Level 1 Level 2 Level 3 Remark z'*>Tk8h
/test 测试系统的根目录 sa])^mkq(
([A;~ p;n
result.php 进行测试并产生结果的PHP文件,测试时只需要在浏览器中请求该页面即可获得测试信息 R7>@-EG
simple__test_phplib.php 使用PHPLIB Template对一般模板进行分析的PHP文件 p-_j0zv
simple__test_fast.php 使用FastTemplate对一般模板进行分析的PHP文件 TY}?>t+
complex__test_phplib.php 使用PHPLIB Template对带区块模板进行分析的PHP文件 hCrgN?Mz
complex__test_fast.php 使用FastTemplate对带区块模板进行分析的PHP文件 %8/$CR
XafyI*pOX
/include 包含PHP类文件.inc.php 7dRU7p>
phplibTemplate.inc.php PHPLIB Template类文件 2J5dZYW
FastTemplate.inc.php FastTemplate类文件 *@Z'{V\
TplTest.inc.php 测试中需要使用的测试类,包含诸如计时、读取/分析日志等方法。 Y,r2m nq
data.inc.php 测试带区块模板时采用的数据文件。 SQ[}]Tm;n
}#1{GhsS
/ihtml 包含模板文件.ihtml hB4.tMgZ
simple_phplib.ihtml 采用PHPLIB Template处理的一般模板文件 bBf+z7iyc
simple_fast.ihtml 采用FastTemplate处理的一般模板文件 ;DOz92X94
complex_phplib.ihtml 采用PHPLIB Template处理的带区块的模板文件 TfOZ>uR"g
complex_fast.ihtml 采用FastTemplate处理的带区块的模板文件 O_q_O
pD9c%P
/logs 包含日志文件.log +J}M$eQ
simple_phplib.log 采用PHPLIB Template处理一般模板生成的日志 8,Z0J
simple_fast.log 采用FastTemplate处理一般模板生成的日志 ' =kX
complex_phplib.log 采用PHPLIB Template处理带区块模板生成的日志 :0l(Ll KD
complex_fast.log 采用FastTemplate处理带区块模板生成的日志 ))vwofkw4
go@}r<