代码之家  ›  专栏  ›  技术社区  ›  Steven

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

  •  4
  • Steven  · 技术社区  · 15 年前

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

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

    echo "foo bar $baz";
    

    b)用连接变量单引号:

    echo 'foo bar ' . $baz;
    
    7 回复  |  直到 15 年前
        1
  •  6
  •   Steven Surowiec    15 年前

    我在一个我之前工作过的博客上做了一个基准测试。( link )然而,正如我逐渐认识到的,有很多变量。其中主要有:

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

    总之,我想说的是,你真的不需要担心这件事。一般来说,如果你在写一个巨大的网站(比如myspace、facebook、flickr等),那么它只会有显著的不同,通常到那时,你身后有太多的硬件,以至于单引号和双引号的事情又变得无关紧要了。

    我个人认为 远的 更重要的是,它将以更实质的方式影响性能(缓存、SQL优化、自动加载以防止不必要的包含等)。

    我个人几乎每次都选择单引号,但不是为了速度。我这么做是因为我觉得它更可读。这对我很重要。

        2
  •  3
  •   Sampson    15 年前

    老实说,我认为你不需要仔细检查这一特定的惯例,当寻求节省性能。但是,对于它的价值,我想我记得我读到字符串中的变量比连接效率低(记住,这是可以忽略的,在我看来不是一个问题)。

        3
  •  3
  •   Community CDub    8 年前

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

    echo 'foo bar', $baz;
    

    这仅适用于使用 回声 语句,在任何其他上下文中,串联可能更好,但我在这方面努力提高可读性,因此我尽可能使用插值。

        4
  •  2
  •   Steffen D    15 年前

    我在vista/php5盒子上测试了计时(microtime),有两个循环,一个用于“一个用于”。

    在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
  •  0
  •   MaxVT    15 年前

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

    双引号字符串的视觉混乱和粗糙程度较低。因此,我赞同乔纳森的观点,即性能差异可能没有那么显著,您应该担心它;相反,您应该按照更容易维护和在项目中保持一致的方式进行。

        6
  •  0
  •   JonB    15 年前

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

    结论是单引号更有效,但正如其他两个答案所指出的,性能差异不足以令人担忧。

        7
  •  0
  •   FrankS    15 年前

    这是一篇旧的文章,上次在2007年3月发布,但它表明性能差异非常低: PHP double versus single quotes by Dave Dash

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

    所以我更关心的是代码的可读性。如果将变量放在引号中,那么如果是较大的文本,则可能难以读取/查找。