5大PHP模板解析引擎比较和性能测评(PHP Template Engines)

  首先,为什么要使用模板引擎?

  php模版引擎原理其实就是正则替换,把模版中的特定的字符串转换成php代码。然后把转换过后的模版内容保存起来,下次直接去引用这个编译好的php文件。因此,比起使用原生的PHP模板,模板引擎多了一个编译模板文件为php代码的步骤,在首次使用模板时,性能上会有少许损失。但如果你的模版编译后不去改变,那么就不会去重新编译模版,也就是从缓存中读取,其性能和原生模板就相当了。

  随着我们继续开发复杂的Web应用程序,在应用程序逻辑和显示逻辑分离变得越来越重要,以便后端开发人员和前端开发人员可以在网站的相同区域进行协作,而无需步骤围绕着彼此的代码。模板引擎通过提供前端开发人员可用于显示后端开发人员准备的数据的简明语法来解决这种情况。前端开发人员可以体验到他们可以阅读和修改的干净漂亮视图的好处,反过来后端开发人员也可以自行承担维护视图的责任。这是双赢的。

  我们比较了哪些引擎?

  为了使模板引擎符合我们的比较过程,它必须满足一些简单的标准。它必须是为PHP编写的,受到积极支持,并且通常受到互联网社区的好评。在起草初步清单给我们的团队以获得进一步的建议后,我们得出以下候选名单:

  Blade

  这是Laravel 4使用的模板引擎,这是一个PHP框架,它于2011年开始运行,并迅速成为当今世界上最常用的PHP框架之一。传闻这个模板引擎非常快,因为它的核心是在一小部分正则表达式替换上运行。另外,作为Laravel的一部分,它必然会加载功能。

  文档地址:https://laravel.com/docs/5.1/blade 

  Mustache

  如果你还没有听说过Mustache,你一直躲在岩石下面。它的第一个定义属性是它几乎可用于您能想到的任何语言。接下来,它被宣告为无逻辑,这基本上意味着它只包含模板引擎可以拥有的逻辑的绝对基线(令牌替换,对于每个,如果为null)。他们故意不做逻辑,也许是为了便于所有这些语言的可移植性,但也许是为了那些认为自己是最优先考虑的人,将干净的观点概念推向了极致。

  Smarty

  Smarty是php官方出的模板引擎,我第一次使用模板引擎,当时我正在使用购物车软件,使用Smarty渲染所有屏幕和产品列表,多年后,Smarty这个名称实际上是术语“模板引擎”的同义词。快进到今天,Smarty仍然活跃并有更新,目前最新版本是 Smarty3。虽然他们的网站可能仍然像2002年那样,但模板引擎本身正在积极开发OOP版本3。

  下载地址:https://www.smarty.net/ 

  Twig

  当Symfony PHP框架开发人员Fabien Potencier发现引擎的早期版本,承担了项目的所有权,更新它以满足他的愿景,并将其集成为Symfony的官方视图引擎时,Twig越来越受欢迎。 Twig的好处不仅在于它对继承,可扩展性和包含的功能的完美承诺 - 而且还在于它是一个独立的组件,这意味着它可以在任何框架或独立的PHP应用程序中使用。

  文档地址:https://twig.symfony.com/ 

  Volt

  这是Phalcon使用的模板引擎,PHP框架快速闪存,因为它是作为C编译的PHP扩展分发的。我对Phalcon PHP框架整体寄予厚望,所以这是一个很好的机会,可以看到它的模板引擎如何与其他人一起堆叠。

  文档地址:https://olddocs.phalconphp.com/en/3.0.0/reference/volt.html 


  模板引擎测试的内容:

  我们在速度测试中查看了许多内容,包括语法,可用逻辑,可扩展性,文档,开发活动,社区支持和性能。我们的速度测试编译了一个主模板,其中包含一个包含1,000个带有顺序编号内容的扩展模板每个扩展模板都包含数组标记,对象标记,if / else条件和扩展块内容。每个测试报告使用的内存和每秒计算的最终模板。在模板引擎嵌入框架(Blade,Volt)的情况下,框架的内存使用和加载时间包含在结果中。以下是每个引擎如何堆叠的摘要:

  Blade

  语法和功能:毫无疑问Blade功能丰富。然而,我对Blade的语法保持中立,因为我没有完全习惯 @s 的函数调用,可能我已经习惯了别的语法,但是我发现可扩展的部分闭包标签(显示,隐藏,覆盖)令人困惑,并且根本无法获得扩展模板以通过包编译 - 这似乎很奇怪,因为所有其他引擎都处理没有问题。

  模板标签示例:@yield('title')

  文档和支持:Blade已经有了很好的文档记录,但我发现它有点'概述 - 因为它将一些更好的点留给其他网站(如Code Bright)和教程更详细地解释。

  测试性能:这个引擎在测试期间非常有趣。只有模板编译时,速度飙升很快(100,000+模板/秒),但是一旦我开始应用到框架,它就会落到一个较低的速度(2,206个模板/秒)。不确定从Laravel中提取Blade的效率如何,我必须在测试中包含框架加载时间,以便安全地做出决策。

  结论:有关语法的问题,通过包含函数编译扩展模板的问题,以及将它用螺栓连接到Laravel 4,我没有看到这对我们来说是合适的。

  Mustache

  语法和功能:Mustache运动尽可能少的逻辑,这对我们的开发团队来说根本不会很好。只使用令牌打印,简单循环,如果进行空/空比较,它将迫使后端开发人员为是否打印某些内容创建额外的标志,并能够从我们的前端开发人员中过滤/转义值。

  模板标签示例:{{title}}

  文档和支持:文档并不多,但这是有道理的,因为功能非常有限。我猜测,一旦你学到了几个基础知识,就没有必要再次查看文档了。

  测试性能:Mustache非常快(6,000模板/秒)所以没有性能问题。

  结论:关于Mustache的简单性有很多值得关注 - 我知道很多人都这样做,但最终缺乏逻辑使它不能成为我们可行的选择。

  Smarty

  语法和功能:{#$title#} 语法看起来很棒;它很干净简单。很多好的功能,非常可扩展。

  模板标签示例:{#$title#} 可自定义两侧界定符 

  $smarty = new Smarty();

  $smarty->left_delimiter = '{#';

  $smarty->right_delimiter = '#}';

  $smarty->auto_literal = false;

  文档和支持:Smarty的文档清晰且组织良好。当我去那里时,我毫不费力地找到答案。该网站本身看起来相当陈旧。

  测试性能:使用非缓存模板(9,634个模板/秒)时Smarty速度非常快,而从缓存直接提供时速度异常快(57,115个模板/秒)。如果速度是您的首选,并且您拥有大量静态模板,那么Smarty可能适合您。

  结论:它不像其他选项那样现代感,但它的良好功能无可否认的速度将其带入了最后两个选项。

  Twig

  语法和功能:{{ title }} 从用于Python的Jinja模板引擎中获取灵感,Twig非常干净漂亮。它带有一组可以扩展的全面的函数,过滤器,测试和宏。它可以对转义,沙箱模式,异常处理和模板加载进行有用的控制。

  模板标签示例:{{ title }} 

  文档和支持:文档组织良好,信息丰富,具有说明性。 Twig周围的社区很大而且很有声音。开发在Github上很活跃。它所谓的家庭框架(Symfony 2)已被选中为Drupal 8提供动力;在WordPress背后的世界第二大CMS的OOP发布。

  测试性能:虽然没有Smarty或C编译的Volt那么快,但Twig在非缓存速度(4,318个模板/秒)和缓存(5,982个模板/秒)方面拥有自己的速度。这将非常快速地满足我们的需求。

  结论:Twig看起来像是一个很好的引擎。作为一个独立的包装,它可以带到你想要的任何地方。它的文档是关键的,引擎速度符合我们的要求,它具有正确装备我们的前端开发团队所需的功能。

  Volt

  语法和功能:像Twig一样,Volt也从Jinja模板引擎中获取灵感,因此语法清晰而美观。它具有丰富的功能,允许您编写自己的过滤器,函数,宏和引擎扩展。

  模板标签示例:{% block last_products %} {{ title }}

  文档和支持:文档清晰,信息丰富,具有说明性。整个Phalcon框架的开发在Github上充满活力和嗡嗡声。 Phalcon社区论坛也非常活跃。

  测试性能:随着这个引擎在编译C中运行,Volt的非缓存速度飙升到超音速领域(23,906模板/秒),并在利用缓存(47,851模板/秒)时将速度提高一倍。最令人印象深刻的是,它包含了包含整个Phalcon Framework堆栈负载的数字。你可能还记得,在包括它的整个框架之后,用螺栓连接到框架(Blade)的另一个引擎比这慢大约20倍。

  结论:Volt是一个令人印象深刻的选择它具有闪电般快速,功能强大且文档齐全。它也是一种非便携式引擎(用法尔康框架固定),这使得它不能在此时被采用 - 但它与Twig的惊人相似之处使它成为未来值得仔细研究的东西。

  性能总览:

  Blade 模板编译:100,000+模板/秒,应用到框架 2,206个模板/秒

  Mustache:6,000模板/秒

  Smarty:非缓存 9,634个模板/秒,从缓存 57,115个模板/秒

  Twig:非缓存 4,318个模板/秒,从缓存 5,982个模板/秒

  Volt :非缓存23,906模板/秒,从缓存47,851模板/秒)


本文自动翻译(有删改)自原文链接:https://www.sitecrafting.com/top-5-php-template-engines/