【问题标题】:Which is better on performance: double quoted strings with variables or single quoted strings with concatenations?哪个性能更好:带有变量的双引号字符串或带有串联的单引号字符串?
【发布时间】:2009-08-21 11:13:17
【问题描述】:

我知道在 PHP 中使用单引号将字符串括起来比使用双引号要快,因为 PHP 不需要检查单引号字符串中是否存在变量。我的问题是哪个会更好:

A) 带有变量的双引号字符串:

echo "foo bar $baz";

B) 单引号和串联变量:

echo 'foo bar ' . $baz;

【问题讨论】:

  • All:我完全同意我们谈论的性能差异很小,但这个问题仍然有效。

标签: php performance string


【解决方案1】:

我在不久前的一个博客上写了一个benchmark。然而,我开始意识到有很多变数。其中最主要的是:

  1. 您正在执行多少个串联?每次您进行连接时,PHP 都会重新解析整个字符串(或者我被告知)。因此,1 级连接可能会更快,但 6 级可能会慢很多。
  2. 数据类型。虽然我没有亲自测试过这个,但我被告知连接的数据类型也很重要,但我不确定有多少。

总而言之,我想说的是,你真正担心它真的没什么大不了的。一般来说,如果你正在编写一个巨大的网站(想想 MySpace、Facebook、Flickr 等),它只会产生显着的差异,而且通常到那时你背后有这么多硬件,单引号和双引号的事情再次变得无关紧要.

我个人认为更重要的事情会以更实质性的方式影响性能(缓存、sql 优化、自动加载以防止不必要的包含等)。

我个人几乎每次都选择单引号,但不是为了速度。我这样做是因为我认为它更具可读性。这对我来说很重要。

【讨论】:

    【解决方案2】:

    老实说,我认为在寻求节省性能时,您无需仔细检查此特定约定。但是,对于它的价值,我想我记得读过字符串中的变量效率低于串联(请注意,它可以忽略不计,在我看来不是问题)。

    【讨论】:

      【解决方案3】:

      在这个问题上我完全同意Jonathan Sampson,但我相信有一个解决方案比你发布的更快。对echo 使用多个参数:

      echo 'foo bar', $baz;
      

      这仅适用于使用echo 语句时,在任何其他上下文中串联可能更好,但我力求在这方面的可读性,所以我尽可能使用插值。

      【讨论】:

        【解决方案4】:

        我在我的 Vista/php5 机器上用两个循环进行计时(微时间)测试,一个用于 ',一个用于 "。

        在 100 次迭代中: - 单引号:0.000139 - 双引号:0.000228

        在 1000 次迭代中: - 单引号:0.002377 - 双引号:0.002056

        在 2000 次迭代中: - 单引号:0.003562 - 双引号:0.010041

        编辑: 还定时回声'Foo',$bar; 100 次迭代 = 0.000107、1000 次迭代 = 0.001381、2000 次迭代 = 0.022434。

        echo 'Foo', $bar;在 100 和 1000 次迭代中是最快的,但由于某种原因它在 2000 次迭代中最慢...?

        【讨论】:

          【解决方案5】:

          如果没有测试(这是解决此类问题的唯一正确方法),我会说带有串联的单引号字符串,因为不必解析字符串。但它非常依赖于实现。

          双引号字符串的视觉混乱和杂乱更少。因此,我同意 Jonathan 的观点,即性能差异可能并不那么显着,您应该担心它;而是采用更容易在项目中维护和保持一致的方式。

          【讨论】:

          • 我个人认为单引号字符串的视觉混乱较少。
          【解决方案6】:

          不久前我读到一篇文章,有人对其进行了实际测试。

          结论是单引号更有效,但正如其他两个答案所指出的那样,性能差异不会大到足以担心。

          【讨论】:

            【解决方案7】:

            这是一篇较旧的文章,最后更新于 2007 年 3 月,但它表明性能差异非常低:PHP double versus single quotes by Dave Dash

            我最近阅读了另一篇文章(虽然找不到了),它甚至指出在某些情况下,双引号可以比单引号更快。不确定这是否真的正确。

            所以我更关心的是你的代码的可读性。如果您将变量放在引号内,如果它是一个更大的文本,可能会更难阅读/查找。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2015-10-29
              • 1970-01-01
              • 2017-08-21
              • 2017-02-26
              • 1970-01-01
              相关资源
              最近更新 更多