|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
培训的第三阶段,开始接触MYSQL,设计数据库,学习PHP如何去连接MYSQL数据库。对于MYSQL,我并不陌生,因为学校开设了Linux系统的课程,对于数据库的操作。模板 用PHP完成MVC开辟形式的逻辑层和暗示层有多种模板引擎可供选择,然而官方引擎SMARTY出生后,选择就有了变更。它的理念和完成都是相当"前卫"的。本文次要会商SMARTY之于其他模板引擎的分歧特色,扼要引见了该引擎的装置及利用,并用一个小的测试案例对照了SMARTY和PHPLIB template的速度和易用性。
1、MVC需求模板
MVC最早是在SmallTalk言语的开辟过程当中总结出的一种设计形式,MVC分离代表了"模子"、"视图"和"掌握",目标就是让分歧的开辟脚色在大中型项目中各司其职。在收集使用法式的开辟中,可以用下图来暗示各概念之间的关系。
该图展现了一个复杂的WEB使用法式,用户在阅读器上看到信息是数据库办事器上的内容,但在这之前经由了使用办事器加工。开辟人员担任的就是创立数据布局、处置数据的逻辑和暗示数据的办法。
96年CGI在中国入手下手盛行的时分,初期的WEB法式员都是从HTML入手下手自学成材的,在PERL中print一行行的HTML并非一件难事,然而跟着收集的一步步提速,页面巨细也从现在的2、三十K暴跌了十倍。写CGI法式就发生了一个急切的请求:分隔PERL和HTML源码。因而,社会前进表现在开辟小组外部的分工上。因为美工和法式员对相互的任务并非非常熟习,在停止协作的过程当中需求用一种商定的"言语"停止交换。
这类言语并非咱们的母语或英语,术语叫做"模板",逻辑和暗示依托它接洽。它是联合了HTML和剧本言语特点的一种表达体例。经由过程这类体例,暗示层可以依照用户所但愿的格局来显示经由逻辑层处置过的数据。假如你有Windows平台下MFC的开辟经历,那末必定会很熟习Document/Document Template/View的封装,这就是一个很典范的MVC例子。关于Web使用来讲,团体以为J2EE中的EJB/servlets/JSP是最壮大的,固然还有简约幽美的Structs。另外一个很着名的完成就是COM/DCOM+ASP,这个组合在我国事最多人利用的。
经由过程几种MVC完成在WEB使用法式里的对照,可以失掉一个关于模板的概念:一组拔出了HTML的剧本或说是拔出了剧本HTML,经由过程这类拔出的内容来暗示变更的数据。上面给出一个模板文件的例子,这个模板经由处置后在阅读器里显示"Hello, world!"
<html>
<head>
<title>$greetings</title>
</head>
<body>
$greetings
<body>
</html>
这里暂且省略处置体例,在前面做专门对照会商。
2、为何选SMARTY?
对PHP来讲,有良多模板引擎可供选择,好比最早的PHPLIB template和后起之秀Fast template,经由数次晋级,已相当做熟不乱。假如你对今朝手中的模板引擎很写意,那末......也请往下看,信任你作为一个自在软件喜好者或寻求效力和优雅的开辟者,上面的SMARTY引见几何会有点意思。
除团体偏好的影响,我一向偏向于利用官方尺度的完成,好比APACHE的XML引擎Axis。优点就是可以取得尽量好的兼容性(好比初期MFC关于Win3x的兼容性就比其它的使用法式框架好,固然如今各类版本都很完美了)。SMARTY宣布之前我一向利用的是PEAR 中的Integrated Template eXtension。这个引擎和PHPLIB template、Fast template几近是兼容的,从模板的语法到对模板的处置同出一辙:都是将模板读入内存然后挪用parse()函数,用数据对预置的标志停止交换。
上面看看SMARTY是怎样做的。接到request后,先判别是不是第一次恳求该url,假如是,将该url所需的模板文件"编译"成php剧本,然后redirect;假如不是,就是说该url的模板已被"编译"过了,反省不需求重编译后可以即刻redirect,重编译前提可以本人设定为固准时限,默许的是模板文件被修正。
怎样,看起来是否是有点眼生?想起来了──这不就是JSP的道理嘛!切实其实,这类"编译"用在PHP如许的注释性剧本引擎上显得匪夷所思,然而细心想一想,JAVA不也是由JVM注释履行的吗?这就叫"没有做不到,只要想不到"。
既然谈到了JAVA,就再对PHP的将来宣布一点意见。PHP官方网站上公布了要在2003年岁尾宣布PHP5.0版。这个版本具有良多极新的特征:好比异常处置,定名空间,加倍面向对象等等。可以说愈来愈向JAVA挨近,SMARTY也是新特征之一,使得PHP更合用于大中型项目标开辟。然而仿佛离我现在选择它的缘由──乖巧易用──愈来愈远了。但就一个软件的保存周期来看,PHP正处在生长期,开辟者付与它更多的功效,以期能胜任贸易使用是利大于弊的。作为PHP的忠厚用户,一定不但愿PHP老是被人求全谴责"才能缺乏"吧?
为何选择SMARTY,仅仅由于它很像JSP?固然有更加充实的来由。起首,除第一次编译的本钱对照高以外,只需不修正模板文件,编译好的cache剧本就随时可用,省去了大批的parse()工夫;其次SMARTY像PHP一样有丰厚的函数库,从统计字数到主动缩进、文字围绕和正则表达式都可以直接利用;假如感觉不敷,好比需求数据了局集分页显示的功效,SMARTY还有很强的扩大才能,可以经由过程插件的模式停止扩大。
现实胜于雄辩。我设计了一个测试法式,经由过程速度和开辟难度这两个要素对照了一下SMARTY和PHPLIB template,选PHPLIB template的缘由是在patrick的文章《在PHP世界当选择最适合的模板》中有一个PHPLIB template对Fast template的比赛,了局PHPLIB template大获全胜,这使得SMARTY有了一个很好的敌手。在测试之前,先谈一下在装置过程当中需求注重的成绩。
3、能够碰到的成绩
在SMARTY的官方网站上,有详实的用户手册,可以选择在线HTML和PDF格局的版本。这里就不再触及手册上已有的内容,只是把初度利用能够碰到的成绩做个注释。
第一个成绩就很要命:提醒说找不到所需文件?并非每个人都依照SMARTY默许目次布局来写使用的。这里需求手工指定,假定目次布局以下:
就需求在index.php里指定目次布局:
$smart->template_dir = "smarty/templates/";
$smart->compile_dir = "smarty/templates_c/";
$smart->config_dir = "smarty/configs/";
$smart->cache_dir = "smarty/cache/";
第一个成绩处理了,紧接着就是第二个:我刚用Dreamweaver生成的大度模板怎样不克不及用?并非模板文件有甚么成绩,而是由于SMARTY默许的标志分隔符是{},不巧的是Javascript一定包括这个标志。好在咱们可以用恣意字符看成分隔符,再加上这两句:
$smart->left_delimiter = "{/";
$smart->right_delimiter = "/}";
这下装置就根基完成,没成绩了。
4、反衬和类比
先构想一下对测试的设计。次要的评选要素固然是速度了。为了停止速度测试,接纳了算术均匀数的作法。在测试页面中反复将页面熟成N遍,再对照总页面熟成工夫。另外一个主要要素是易用性(至于扩大性不必对照已有了局了),所以利用的模板不克不及太小。我用的是我团体主页的的页面,一个用Firework+Dreamweaver生成的HTML文件,巨细约7K。个中的变量设置也接纳最经常使用的区块,在PHPLIB template里叫block,而SMARTY则称section。别小视这称号的分歧,易用性尺度分两块:模板文件和剧本文件的语法是不是简明易用。
上面就深切到测试中来。先看看两种模板文件的语法:蓝条右边是PHPLIB template的模板,右侧属于SMARTY。团体偏好是纷歧样的,所以这里不作评论。侧重对照一下剧本里的处置语句,先看PHPLIB template的:
$tpl->set_file('phplib', 'bigfile.htm');
$tpl->set_block('phplib', 'row', 'rows');
for ($j = 0; $j < 10; $j++){
$tpl->set_var('tag' ,"$j");
$tpl->parse('rows', 'row', true);
}
$tpl->parse('out', 'phplib');
$tpl->p('out');
上面是SMARTY的:
$smart->assign('row',$row);
$smart->display('bigfile.htm');
SMARTY只用了tags和row两个变量,而PHPLIB template则多了模板文件的handler,还有一个稀里糊涂的out。说其实的这个out我现在学的时分就不晓得为何要存在,如今看起来,仍是别扭。为何SMARTY少那末多处置语句呢?谜底是任务由引擎完成了。假如你喜好研究源法式,可以发明在Smarty_compiler.class.php里有一个名叫_compile_tag()的函数,由它担任把section这个标签转换成php语句。这不是一个通俗的标签,它带有参数和数据,节俭了剧本编程的任务量,而模板标签上的任务量相差又不大,可以剖断在易用性上SMARTY凌驾一畴。
上面该轮到咱们最存眷的速度了,究竟关于一个纯熟的web开辟者来讲,把握再坚苦的东西不外是工夫成绩,况且模板引擎这类进修曲线陡峭的手艺。而速度则是web使用法式的性命,特别是模板引擎利用在并发会见量很大的站点上,这点就更主要了。测试入手下手前,我感觉PHPLIB template会在这一环节上胜出,由于它履历了良多次晋级,已根基没有甚么bug,并且SMARTY的引擎个头太大,不像它的敌手只要两个文件。
公然,测试了局以下图,PHPLIB template有25%的速度优势:
但不会一向如许,我又按了一次刷新,此次失掉了纷歧样的了局:
PHPLIB根基没变更,然而SMARTY进步了25%的速度。持续刷新,失掉的都是相似于第二次的了局:SMARTY比PHPLIB template 快上近10%。我想这就是编译型比注释型快的道理了。SMARTY引擎自己就很大,加上还要把模板编译成php文件,速度固然比不上玲珑的PHPLIB template。但这只是第一次的情形。第二次接到恳求的时分,SMARTY发明该模板已被编译过了,因而最耗时的一步被跳过了,而敌手还要墨守成规地停止查找和交换任务。这是编译道理里讲到的很经典的"用空间换工夫"例子。
5、结论
结论就是假如你已爱上SMARTY了,那末还等甚么呢?固然并非说它就万能,就好像我用MVC形式来写我的团体网站,不但没有削减任务量,反而老是要为分歧条理间的耦合费心。
SMARTY不合适甚么呢?举个手册里的经典例子:天色预告网站。我还想到一个:股市大盘。在这类网站上用SMARTY会因为常常的重编译而效力偏低,仍是PHPLIB template更加合适。
本文并非为了对照两种引擎,而是为了申明SMARTY的优势。利用它最成心义的地方在于它是PHP新系统的一部分,作为一支自力的力气,除.NET和JAVA ONE这两大系统以外,大中型web开辟还有其余选择。这关于GNU项目来讲,其意义无异于刘邓大军千里跃进大别山。
参考文献
SMARTY官方站点:smarty.php.net
王晨:《在PHP世界当选择最适合的模板》
本文中测试法式下载:test.tar.bz2
会有很多高手的鼓励,新手的支持,慢慢你劲头就十足,有更多的信心和兴趣去学。 |
|