PHP模板引擎比较和给Template_PHPLIB增加cache缓存功能

Show All   1 2

  PHP下的模板解决方案很多,主流的有 PHPLIB、IT、Flexy、Smarty等,这些模板引擎各有所长,很多人推崇Smarty,根据个人使用感受来看,Smarty有以下特点:

1、模板里面支持语法丰富,方便“程序员”(注意)在模板中实现丰富灵活的逻辑;
2、使用“预编译模板”的概念,能使性能得到一定提升;
3、支持Cache功能。

  这几个特点我认为是最核心的部分,另外Smarty还提到所谓的模板FrameWork,个人认为价值不大,并非一个完整的PHP FrameWork,所以并不推崇。而就前面Smarty的几个特点来说,反倒成为我不选择Smarty的原因之一。

1、作为模板最大的作用就是MVC框架支持,Smarty的模板语法过分丰富,导致模板在View层与Model和Controller层模糊不清,在实际的PHP应用开发中,程序员实际上过多的参与到了View层的工作,不利于团队的分工。

2、而Smarty提供的“预编译模板”的功能,表面上提高了性能,但是在实际应用中,并非完全如此,由于PHP本身属于解释性语言,而Smarty的预编译功能也是使用了PHP本身来开发,并没有使用C/C++来开发成PHP的扩展,从性能上来讲,编译的开销会比较大,如果内容更新较频繁的应用,这样的功能并不适用,反倒增加性能开销,再有Smarty会把一个简单的模板和应用,编译后生成好几个复杂的php文件,对于存储成本的和性能成本的增加也是有影响的;

3、Smarty本身太大,核心的类文件达到160多k,如果加上Core和plugin的类,达到300多k的代码,每次用户请求产生的系统开销是很大的,比较适合中小应用。相比之下,PHPLib类仅一个文件14k左右,Flexy也很小,更适合大型应用。

  相比Smarty,个人更推荐使用Flexy和PHPLIB,Flexy具备了Smarty提供的大部分功能,也是预编译,但是性能经过我测试比Smarty要好,也同样有丰富的语法,对于喜欢同时开发PHP代码和模板文件的程序员来说,值得推荐。而PHPLIB是我最推荐使用的,主要考虑这样几个因素:

1、PHPLIB有很久远的历史,它的前身是Perl的模板引擎,然后迁移到php3时代的phplib里面,接而进入到PHP的PEAR框架下,从稳定性来说不用怀疑;

2、PHPLIB相当简单,全部代码一个类,仅14K左右,提供了最基本的MVC解决思路,虽然没有灵活多样的模板语法支持,但是根据我的经验,WEB应用上使用模板解决的地方,PHPLIB都能实现,同时由于代码量非常小,系统开销也会小;

3、性能优秀,网上曾经有人做过PHPLIB和Smarty的性能测试,在Smarty不打开编译缓存功能的情况下,PHPLIB比Smarty快20%,Smarty打开编译缓存情况下,比PHPLIB快10%,虽然这个测试我认为并不充分,并且和实际应用有差距,但是我认为至少从性能上来说,PHPLIB并不比Smarty慢,相反我认为在实际WEB应用中会更快,如果给PHPLIB增加一个Cache功能,那么性能能提升将近10倍(这个结果是我自己测试后得到的结果);

4、PHPLIB在模板的解析和实现上与别的模板没有什么差别,大家都是使用字符串替换操作来实现,而且都使用了preg_replace()函数来实现。

  通过前面的个人分析(个人意见,大家可以自己实际测试,也可以否定我的说法),我决定在我的WEB应用中使用基于PHPLIB的模板引擎来实现MVC模式,不过由于PHPLIB过分简单,不提供Cache功能,所以我自己动手扩展了PHPLIB类,增加缓存的实现,实际使用后发现效果非常好。

在我扩展的类 MyTemplate 中,主要实现下面功能需求:
1、自定义缓存开关
2、支持缓存超时判断
3、支持模板文件更新后更新缓存判断
4、支持程序文件更新后缓存判断
5、支持缓存文件散列存放自定义

  下面是我的 MyTemplate 类实现代码,里面包含了具体的使用说明和范例,有不明白的地方可以留言给我,欢迎大家和我交流PHPLIB相关的模板应用,和Smarty、Flexy相关的内容就希望别问我,本人不对此类问题给予回答,谢谢。

Show All   1 2
You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.
13 Responses
  1. php says:

    很不错的模版,代码简洁实用,多谢分享。继续期待你的好文章:)!!!!

  2. selina says:

    请问phplib有没有可以在win下安装的版本,在那里可以下载到?

    还想问多大的程序规模需要用到phplib?

    谢谢!

  3. Michael says:

    phplib作为一个整体的包来说,已经很少用到了,取而代之的是PEAR,phplib是php3时代杰出的产品。

    项目无论大小,都可以用PEAR,至少可以单独使用里面的部分模块。

  4. selina says:

    您好,我现在安装的是php5,里面有PEAR,我想我已经在不知不觉用了PEAR,但我自已不知道罢了。

    我原来做过一段时间的php开发,但不是cvs结构的,现在自已构化出一个小项目,我想练习使用cvs的手段,使我和美工的工作能够完全分离,但我真的心里没有底,如果美工对代码是一无所知,只否从页面到后台的开发工作就都是我的了。:(

    我想我应该会有很多问题请教,但我需要先从网上先搜一搜。

    谢谢您对一只小菜鸟的指导。

  5. selina says:

    上面因为没有理解透彻,所以用错了cvs,我其实想说的应该是MVC。

  6. Michael says:

    [Comment ID #17233 Will Be Quoted Here]

    🙂 欢迎常来,相互帮助!

  7. selina says:

    我在网上搜了一些关于pear的资料,可是还是得不到要领,请教一下,如果想用pear的模板功能,我应该从那里入手比较好,有没有相关的例子程序?

    我图省事,装的是xampp,里面有php5,好象带pear,我也下载了一个pear的英文手册,但是没有找到相关templant的资料。不知道从那里下手?

  8. Michael says:

    你就看这个页面 http://pear.php.net/manual/en/package.html.html-template-phplib.php 然后照着例子做一下,能有个大概的了解了。

    然后再去网上搜索一下 “PHP 模版 PEAR”这样的关键词,找一些例子巩固一下。模版其实很简单,说简单了就是正则表达式的字符串替换。

  9. selina says:

    我现在还有一个特别矛盾的问题,想征求一下您的意见。

    我现在是在开发一个针对公司的任务流管理的应用程序,如果我用DW开发的话,开发速度会很快,但这样,我就没有学习新技术的机会了。但我也很怕用新技术会把开发进度变得太慢。并且,使用这种新技术,将来找虚拟空间,也会比较不好找,您有什么好的建议呢?

  10. Michael says:

    说实话,我还没有完全弄明白您的意思,你可以给我发邮件 lee@toplee.com

  11. king2003 says:

    这个功能太弱条件语句都不支持

  12. 私家侦探 says:

    “预编译模板”的功能

  13. gray says:

    Blitz模板引擎的中文文档:http://www.igaom.cn/blitz-template

Leave a Reply

Your email address will not be published. Required fields are marked *

*
To prove you're a person (not a spam script), type the security word shown in the picture. Click on the picture to hear an audio file of the word.
Anti-spam image