插值(直接插入字符串)VS性能方面的串联

问题描述:

组合2个字符串时,以下哪种方法更快?为什么它可以跑得更快?插值(直接插入字符串)VS性能方面的串联

PHP代码:

$str1 = 'Hello'; 
$str2 = 'World'; 

方法1:

$txt = $str1.$str2; 

方法2:

$txt = "$str1$str2"; 
+0

第一个是更快的 – Ziumin

+1

构建基准测试并自行测试。 – Gumbo

+0

可能重复[在使用内联字符串与php5中的串联速度差异?](http://*.com/questions/13620/speed-difference-in-using-inline-strings-vs-concatenation-in-php5) –

操作码比较

代码:

$a=1; 
$b=2; 
echo "$a$b"; 

操作码:

1  0 > ASSIGN             !0, 1 
     1  ASSIGN             !1, 2 
     2  ADD_VAR           ~2  !0 
     3  ADD_VAR           ~2  ~2, !1 
     4  ECHO              ~2 
     5 > RETURN             null 

代码:

$a=1; 
$b=2; 
echo $a.$b; 

操作码:

1  0 > ASSIGN             !0, 1 
     1  ASSIGN             !1, 2 
     2  CONCAT           ~2  !0, !1 
     3  ECHO              ~2 
     4 > RETURN             null 

中级结论

串联有一个较少的操作码,欢呼!不是,我们仍然需要测试实际的运行时性能。

要查看任何一段代码所产生的操作码,看看大vld extension

运行时性能

轧过0.5米迭代在工作站上(平均超过10次):

  • 内联:0.9793s
  • 级联:0.9252s

结论

级联更快,虽然这是不太可能影响任何特定应用程序的性能。

+1

你怎么知道一个'CONCAT'比两个'ADD_VAR'快? – Gumbo

+1

我在哪里可以得到这样的操作码打印? –

+1

@MadaraUchiha ['vld'](http://pecl.php.net/vld) –