|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
会MYSQL吗?会,我会把我的信息在数据库里插入删除啦对照|模板 PHP工程中的模板使用,是停止中型甚至大型项目中建议采取的处置体现层的好举措。然而详细到模板的实行,采取何种现有的模板手艺却需求停止一番对照。
PHP世界中对照受存眷的模板处置有PHPLIB Template和FastTemplate两种,咱们对手艺的易用性和速度停止了评测--想晓得了局吗?
工作的原因:你用过FastTemplate吗?
关于PHP工程中的模板使用,其实我和我的同事们已在很多的项目中接触过--关于它的优点,我想不管是在实践开辟阶段仍是上升到设计形式的角度都已有良多"先辈前贤"会商过了。就项目实行而言,在一些中型乃至大型的项目中,无效的将HTML(还有其他文本模式的体现层)和PHP代码分隔,不但在开辟阶段可以分离进步界面设计人员和使用法式编写人员的任务效力,更会给项目标测试和保护带来伟大的便当。
然而--本文的目标不是会商模板的优弱点,也不是作为指点性的教程教学若何在PHP项目中利用模板,而是以使用的视角对照两种PHP世界中最为盛行的模板处置体例(其实只不外是两种模板类):PHPLIB Template和FastTemplate。
其实我一向都在"宁静"的利用着PHPLIB Template--很不乱并且看上去速度也不错,以致于我其实不想再去不安的寻觅能够更好的替换品--固然我也晓得这个地球上还有FastTemplate如许的器材(并且还在Perl的世界中赫赫有名)。直到有一天,有一个同事问我:"不晓得FastTemplate怎样?为何咱们不尝尝FastTemplate呢?"
"好吧,就让咱们尝尝!"不外作为一个稳妥的办法,在任何新的形式或办法引入项目之前,最好可以加倍周全的懂得它,和找到一个或几个足够压服本人和同事去采取它的来由--关于FastTemplate也不破例。
配角进场:懂得PHPLIB Template和FastTemplate
后面已说过,我已利用PHPLIB有一段工夫了--我想屏幕前的你或许和我一样,也对这个优异的东西类库印象很深吧!一样,当我入手下手追求模板的处理举措时,很天然的就会在最接近身旁的东西箱里搜索,因而我找到了PHPLIB中的Template类。在最后的很快阅读完它供应的API以后(固然还得感激PHPLIB详实的文档),我就入手下手了利用它的过程--直到如今。
而FastTemplate仿佛名望更嘹亮一些,在其起家的Perl世界中天然是如许,在PHP世界中仿佛也是,单单从这一点上就足够让人信任它的才能了。
关于二者的利用举措,原本我想在这里多空话几句的;然而究竟感觉本人生怕专门写出两篇教程来也没有现有的教程受接待--在本文的参考材料中有关于PHPLIB Template和FastTemplate的着名教程,假如你自认还没有对这两种模板或个中的一种有所熟悉,建议你先去看看那两篇文章,应当会失掉很多无益的模板使用常识。
(一番鼠标点击和眼球动弹乃至亲身编写测试代码以后,)如今你对两种模板都有了一些懂得,或许已发明了它们之间的良多类似的地方,鄙人面我就会将这些中央归结一下。
变量的设置
很分明,{FOO}或{BAR}的模式在两种模板中都是指定的模式;也就是说,两种模板处置体例中,模板文件自己的表面应当可所以分歧的(好比都是HTML文件两头含有将要被交换的以{}标识的变量)。
模板类的初始化(类的构建器)
都需求在构建模板类的时分指定模板文件存在的目次地位。
变量的交换
模板处置中最经常使用的就是变量交换,两种体例除办法名分歧以外(PHPLIB Template采取set_var(),而FastTemplate采取assign()),用法几近也是分歧的--可以采取(key, value)的体例,也能够直接传递一个数组(array(key=>value))。
模板文件的处置
都是采取为每个模板文件指定一个句柄(handler)的举措,同时句柄也能够作为变量的值交换另外一模板文件中的变量。
解析、输入进程
都是需求挪用parse()办法(这个办法名居然是不异的)将需求输入的模板文件解析后赋值给一个句柄,然后挪用各自输入的办法(PHPLIB Template中是p(),FastTemplate中是FastPrint())输入该句柄的内容并停止处置。
反复解析的进程
好比从数据库中掏出几笔记录需求显示而模板文件只要可交换的一行变量的时分,就很需求如许的功效。二者都具有如许的功效,只是利用时稍稍有些分歧罢了(PHPLIB Template采取parse(handler, value, true),而FastTemplate采取parse(handler, .value)在值的后面多加一个点),应当说PHPLIB Template的办法机关得绝对幽美一点。
区块解析的进程(或可以称作静态解析)
想像一下你需求从数据库中掏出合适前提的数据并显示在网页中--然而由于前提会不尽不异,你其实不能明白的晓得会有几何条数据--这时候候假如你又要采取模板,那末区块就是最好的选择。它是在模板顶用特定的符号界说的局部,这一局部可以重复的被解析并添加到(而不是前一次的解析被后一次掩盖)输入网页中。区块或许就像上面显示的一样(右边是PHPLIB Template采取的区块设置,而右侧则是FastTemplate采取的):
好吧,假如你对以上惨白的文字引见仍是有些摸不着思想,那末咱们就来看看两个详实的模板处置的例程吧!(假如你有乐趣对前面的测试代码停止开掘,就会发明其实以下的两个例子都来自那边)
怎样,是否是感到几近是分歧的?上面是区块解析的例子,你也会发明一样的后果:
咱们的测试方针和了局
停止了对PHPLIB Template和FastTemplate的懂得,应当可以进入本文的正题了--在使用情况中固然应当选择易于利用同时速度幻想的部件构建体系,那末关于如许的两品种似手艺,停止评测十分有需要。评测应当是由两局部构成:手艺的利用难度和速度的快慢水平--前者是评论的局部,尔后者是测试的局部。关于前者,咱们次要针对两个类供应的API停止评论;关于后者,咱们会让测试的数据来讲话,固然这两头免不了需求编写一些复杂的测试代码。
回合一:手艺的易用性
这一回合次要是切磋PHPLIB Template和FastTemplate供应的API的利用情形。应当说,前者供应的API更合适PHP的一些罕见编码常规(出格是当你的项目中采取了PHPLIB的其他类时,如许的标准性会对全部项目有好的影响);尔后者的一些办法名总感觉有些别扭(但愿你不要感觉这只是我的狭窄意见,好比FastPrint()等等),同时办法的参数也不长短常"地道",这一点你也能够从方才的代码看出来。
别的一点需求指出的是,关于模板区块的解析,FastTemplate直到比来的版本才入手下手撑持。也就是说,假如你采取了之前的版本,在处置诸如数据库中纪录的输入等外容时,不能不把这块内容自力存储在某处,然后在模板剖析处置时附加上这个文件--真是一件让人舒服的工作,特别是对网页设计人员而言。
固然还有一点需求考查--那就是关于PHP版本的撑持。PHPLIB发生在PHP3的时期,这一点和FastTemplate差不多;然而依据咱们的使用,PHPLIB在如今的PHP4情况下运转相当好,而FastTemplate的网页上则显示了一些信息标明关于PHP4或许它还有一些BUG存在。
好了,讲了这么多(或许你会感觉都是FastTemplate的好话),这个回合的成功者很分明:PHPLIB Template,特别是你同时在利用PHPLIB的其他类时,如许的手艺易用性加倍分明(你将不会对这些出自统一个开辟小组的API感应生疏)。
回合二:处置速度
或许这才是良多人最存眷的局部--在这个回合中,咱们会采取两种模板处置的体例:一种是惯例的剖析、交换,另外一种是对区块的解析、交换--同时如许的两种体例也是在实践体系中使用最多的:前者是普通的页面处置,后者是关于数据库内容的输入处置。同时,因为两种模板类采取的模板文件的格局根基不异,使得咱们可以供应几近分歧的模板文件分离供两种模板解析,更增添了测试的可托度。
展开如许的速度测试之前会拟定一个测试计划,复杂说来就是关于两种处置体例分离编写两个PHP测试页面,同时有一个掌握测试的页面屡次挪用这两个页面并纪录工夫供收集测试数据。(假如有乐趣你还可以参考以下具体的测试计划,或许会对你深切懂得此次测试有所匡助)
小结--在全部测试体系完成以后,咱们应当可以失掉/test目次中以下的文件清单:
(有点庞杂的测试计划)
起首是肯定测试的硬件和软件情况--硬件一定是本人的机械了,Intel Celeron 733MHz, 256M RAM,40G HDD;软件平台中OS为Win2K Pro,Web办事器为Apache+PHP,且以模块体例运转。
其次是计划此次测试的体系--固然先在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的体例恳求以上的两个页面以取得测试数据。
选择待解析的模板和PHP法式编写--由于两种模板处置体例关于模板文件自己的格局请求几近分歧(好比待交换变量都采取{VAR}的模式等等),因而可以尽可能包管统一测试中二者选用的模板尽量不异以追求测试的最大公平性;同时在前文提到,为摹拟实际体系中经常使用的两种模板使用:普通的页面处置和对数据库内容的输入处置,测试利用的模板文件也分红两种:一种是通俗的带有一些待交换变量的模板文件,另外一种是带有区块的需求依据应输入的内容重复交换的模板文件。一样关于这两种模板文件,也需求分离编写两种分歧的PHP文件停止解析。
测试办法--在阅读器中向/test/result.php提出恳求,需求带参数type=[simple|complex],在前往的了局中便可看到两种模板在复杂或庞杂形式下的测试了局。
Level 1 Level 2 Level 3 Remark
/test 测试体系的根目次
result.php 停止测试并发生了局的PHP文件,测试时只需求在阅读器中恳求该页面便可取得测试信息
simple__test_phplib.php 利用PHPLIB Template对普通模板停止剖析的PHP文件
simple__test_fast.php 利用FastTemplate对普通模板停止剖析的PHP文件
complex__test_phplib.php 利用PHPLIB Template对带区块模板停止剖析的PHP文件
complex__test_fast.php 利用FastTemplate对带区块模板停止剖析的PHP文件
/include 包括PHP类文件.inc.php
phplibTemplate.inc.php PHPLIB Template类文件
FastTemplate.inc.php FastTemplate类文件
TplTest.inc.php 测试中需求利用的测试类,包括诸如计时、读取/剖析日记等办法。
data.inc.php 测试带区块模板时采取的数据文件。
/ihtml 包括模板文件.ihtml
simple_phplib.ihtml 采取PHPLIB Template处置的普通模板文件
simple_fast.ihtml 采取FastTemplate处置的普通模板文件
complex_phplib.ihtml 采取PHPLIB Template处置的带区块的模板文件
complex_fast.ihtml 采取FastTemplate处置的带区块的模板文件
/logs 包括日记文件.log
simple_phplib.log 采取PHPLIB Template处置普通模板生成的日记
simple_fast.log 采取FastTemplate处置普通模板生成的日记
complex_phplib.log 采取PHPLIB Template处置带区块模板生成的日记
complex_fast.log 采取FastTemplate处置带区块模板生成的日记
经由了测试体系的设计和编写,而且向担任网页设计的同事讨来两个模板以后,咱们就能够会见这个体系了--后期的辛苦休息使得如今旁观了局的任务只需求在阅读器的地址栏中打入 http://localhost/tpl_test/result.php?type=[simple|complex] (假如你是在其他的非当地办事器中停止这个测试,那末域名应采取地点办事器的域名--好比我本人的机械叫做patrick等等)。上面是我本人在某一次的测试中取得的了局:(测试了局数据注释)
称号 注释 备注
amount 测试总数(一连恳求该页面总数) 该参数可在result.php文件中修正
max_seq 最大处置工夫的序号 局限在1-amount之间
max_value 最大处置工夫的值 峰值数据供参考
min_seq 最小处置工夫的序号 局限在1-amount之间
min_value 最小处置工夫的值 峰值数据供参考
average 均匀处置工夫 测试中最有价值的数据
固然,假如你感觉一次测试的了局其实不牢靠,可以重复按下阅读器的刷新按钮,就可以够察看到分歧测试的了局(实际上应当是相差无几)。
测试了局和发表"XX选择奖"
好了,在侧重速度测试的回合二中PHPLIB Template以惊人的2倍的速度克服了FastTemplate;而同时在第一回合中PHPLIB Template有以优秀的API设计和易用性占得下风。了局不言而喻--咱们的选择奖固然发表给了PHPLIB Template,同时此次的测试也让咱们对PHPLIB这个类库设计有了更深的懂得。
客观评价
既然有了却果,那末FastTemplate天然也就不克不及进入咱们的项目了--固然从了局上看来咱们消费了半天的工夫失掉了一个毫无变更的了局(PHPLIB Template持续很好的在项目中利用),然而测试的进程倒是很有价值的,出格是采取PHP停止测试的办法,应当会在今后的相似决议计划中起到必定参考感化。
参考材料
本文中的测试代码下载 (article_256.zip)
引见PHPLIB Template和FastTemplate的有名文章
Templates, The PHPLIB Way
by David Orr, May of 2000
(http://www.phpbuilder.com/columns/david20000512.php3 )
(PHPLIB Template)
Templates - why and how to use them in PHP3
by Sascha Schumann, March of 1999
(http://www.phpbuilder.com/columns/sascha19990316.php3 )
(FastTemplate)
PHPLIB Template和FastTemplate的主页
PHP Library Homepage
(http://phplib.netuse.de )
FastTemplate Homepage
(http://www.thewebmasters.net/php/FastTemplate.phtml )
其他模板处置文章和其他关于PHP的材料
PHP Builder (http://www.phpbuilder.com )
以上文章的中文译本和其他的中文PHP材料
PHP中文用户(http://phpuser.com )
PHP和HTML混合编程应该不成问题,在这期间,你完全可以让PHP给你算算 一加一等于几,然后在浏览器输出,不要觉得幼稚,这的确是跟阿波罗登月一样,你打的是一小段代码,但是对于你的编程之路,可是迈出了一大步啊!兴奋吧?但是不得不再给你泼点冷水,您还是菜鸟一个。 |
|