插值(直接插入字符串)VS性能方面的串联
组合2个字符串时,以下哪种方法更快?为什么它可以跑得更快?插值(直接插入字符串)VS性能方面的串联
PHP代码:
$str1 = 'Hello';
$str2 = 'World';
方法1:
$txt = $str1.$str2;
方法2:
$txt = "$str1$str2";
操作码比较
代码:
$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
结论
级联更快,虽然这是不太可能影响任何特定应用程序的性能。
你怎么知道一个'CONCAT'比两个'ADD_VAR'快? – Gumbo
我在哪里可以得到这样的操作码打印? –
@MadaraUchiha ['vld'](http://pecl.php.net/vld) –
第一个是更快的 – Ziumin
构建基准测试并自行测试。 – Gumbo
可能重复[在使用内联字符串与php5中的串联速度差异?](http://stackoverflow.com/questions/13620/speed-difference-in-using-inline-strings-vs-concatenation-in-php5) –