【问题标题】:php / templating vs echoingphp / 模板与回显
【发布时间】:2011-11-17 03:44:16
【问题描述】:

我想知道哪一个性能最好:

1- 使用 smarty 模板(或任何其他更好的模板)

<?php
$Smarty = new Smarty();
// set all the default variables and other config
$Smarty->assign('var1', 'hello');
$Smarty->assign('var2', 'world');
$Smarty->display('page.html');

2- 使用此代码:

<?php
$var1 = 'hello';
$var2 = 'world';
echo "$var1 $var2";

3- 使用此代码:

<?php
$var1 = 'hello';
$var2 = 'world';
echo $var1 . " " . $var2;

基于这 3 个例子,我想不出一个新的例子,哪一个在性能上最好用

注意:当然我有比这个例子更多的变量。

谢谢

【问题讨论】:

  • 如果你回到两年前,这些类型的问题的答案总是“不要过早优化!”并且,“如果您担心性能,请不要使用 PHP。”这似乎已经过时了,但它仍然是真的。显然,由于 PHP 被解释(通常),更少的代码 = 更好的性能,所以模板引擎会更慢。
  • 至于 PHP 对性能不利,只有在你编码不佳的情况下,只要不要过早优化——我是通过艰难的方式了解到这一点的。说真的,把它放在心上。找到瓶颈并解决它。

标签: php performance template-engine


【解决方案1】:

据我所知,连接 PHP 变量(如您的第三个示例中所示)比使用 "$var1 $var2" 更快,因为每个标记都是动态评估的(这很糟糕),因为它混合了变量和常量字符串。

所以,在 2 到 3 之间,我相信这取决于上下文:如果您有一个混合了变量和常量的长字符串,那么方法 3 会更快。否则,如果它与您的示例相同,则 2 可能会更快(但是,差异可以忽略不计,因此应该是一个有争议的问题)。

使用模板引擎总是比原始代码慢。


现在如果您没有非常好的理由不使用模板引擎,那么您应该使用模板引擎。为什么?

  • 关注点分离:您的 PHP 不应该关心您的 HTML,反之亦然。
  • 维护:当您混合使用 HTML 和 PHP(或任何其他语言)时,维护可能会成为一场噩梦,应该不惜一切代价避免(除非您正在做一些微不足道的事情)。李>

【讨论】:

  • 我不同意模板引擎——即使您将框架投入到该术语中。从概念上讲,我不认为框架不好,但我构建了自己的框架,因为其他框架不能满足我的速度需求。虽然他们的目标是简化,但他们往往会使事情复杂化。
  • @Kerry: 两件事 - 1)如果你想花大量的时间(相对地)滚动自己并处理框架(通常)已经修复的错误/漏洞,那很好. 2) 如果速度非常重要,那么你不应该使用 PHP :)
  • @Kerry:此外,在大多数情况下,如果您不了解框架和/或它们的工作原理,框架只会使事情复杂化。他们也可以在需要时调整速度。我真的会发现任何没有使用框架的开发人员在任何面试中都是可疑的。
  • @Demian -- 我并不是要打架或直接侮辱。 Rasmus Lerdorf:sitepoint.com/rasmus-lerdorf-php-frameworks-think-again -- 但即使是 CI 也会大大减慢速度。正如他所说,你应该得到你需要的东西,就是这样,所以我根据其他框架(不是从头开始)制作了我需要的东西。我构建的系统因其速度(除其他外)而不断受到称赞。此外,对于使用 PHP 的网站:Facebook、Yahoo、eBay、Digg 等,PHP 的速度很好。
  • @Kerry: 别担心,我一点也不认为你的帖子是侮辱性的 :).. 你的澄清(采取你需要的)绝对是有道理的,我不会反对完全是这样的:)。在 90% 的情况下,如果构建得当,你是对的 - PHP 在速度方面很好(尽管我们不要讨论相对生产力;)).. 但即使 Facebook 需要高可用性系统(即聊天),他们也会转向其他技术(即针对此特定情况的 Erlang)。
【解决方案2】:

只有性能?在第一个示例中,您使用的是 Smarty,这是一个由数千行 PHP 代码组成的相当重要的库。在接下来的两行中,您将使用三行 PHP only。当然这两个会更快,开销更少,因为 PHP 不必先解析 Smarty。

至于是字符串连接还是变量的变种,以及哪些引号等更快,这是一个微优化,不太可能在子 Facebook 规模上产生影响。一个或另一个只是节省纳秒。如果有帮助,您可以在此页面上阅读实时比较:http://www.phpbench.com/

【讨论】:

    猜你喜欢
    • 2012-11-23
    • 1970-01-01
    • 2010-10-03
    • 2010-11-26
    • 1970-01-01
    • 2017-07-16
    • 1970-01-01
    • 2011-06-29
    • 2011-10-07
    相关资源
    最近更新 更多