繁体   English   中英

哪个在性能上更好:带变量的双引号字符串或带连接的单引号字符串?

[英]Which is better on performance: double quoted strings with variables or single quoted strings with concatenations?

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

A) 存在变量的双引号字符串:

echo "foo bar $baz";

或者

B) 用连接变量单引号:

echo 'foo bar ' . $baz;

我在不久前工作的博客上对此进行了基准测试 然而,当我意识到有很多变数时。 其中主要有:

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

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

个人而言,我会说有,将在一个更实质性的方式(高速缓存,SQL优化,自动加载,以防止不必要的包括等)影响性能更为重要的事情。

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

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

在这个问题上,我完全同意乔纳森·桑普森的观点,但我认为有一个解决方案比您发布的解决方案更快。 echo使用多个参数:

echo 'foo bar', $baz;

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

我在我的 Vista/php5 盒子上用计时(微时间)测试了两个循环,一个用于 ',一个用于“。

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

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

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

编辑:还有时间 echo 'Foo', $bar; 100 次迭代 = 0.000107,1000 次迭代 = 0.001381,2000 次迭代 = 0.022434。

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

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

并且双引号字符串具有更少的视觉混乱和繁琐。 所以我会站在 Jonathan 一边说,性能差异可能没有那么大,你应该担心; 相反,采用更易于维护和在项目中保持一致的方式。

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM