sup*_*.ws 0 php performance opcode
哪种结构更快:
$a = $b * $c ? $b * $c : 0;
Run Code Online (Sandbox Code Playgroud)
要么
$i = $b * $c;
$a = $i ? $i : 0;
Run Code Online (Sandbox Code Playgroud)
所有变量都是本地变量.
对于多重复制,添加,减法和除法,速度是否不同?
这里有一些澄清:
BoltClock为我提供了有用的信息,但user576875通过发布操作码解码器的链接来完成我的一天!他的答案也包含对我问题的直接回答.谢谢!
Arn*_*anc 10
如果你有PHP 5.3,这会更快:
$a = $b * $c ?: 0;
Run Code Online (Sandbox Code Playgroud)
这与之相同$a = $b * $c ? $b * $c : 0;,但$a*$b只进行一次测量.此外,它不会像您的第二个解决方案那样执行其他分配.
使用Martinv.Löwis的基准脚本我得到以下时间:
$a = $b * $c ?: 0; 1.07s
$a = $b * $c ? $b * $c : 0; 1.16s
$i = $b * $c; $a = $i ? $i : 0; 1.39s
Run Code Online (Sandbox Code Playgroud)
现在这些是微优化,因此在执行此操作之前,可能有许多方法可以优化代码:)
如果不是这种情况,您可能还想比较生成的PHP OP代码:
1 $a = $b * $c ? $b * $c : 0;:
number of ops: 8
compiled vars: !0 = $a, !1 = $b, !2 = $c
line # op fetch ext return operands
-------------------------------------------------------------------------------
1 0 MUL ~0 !1($b), !2($c)
1 JMPZ ~0, ->5
2 MUL ~1 !1($b), !2($c)
3 QM_ASSIGN ~2 ~1
4 JMP ->6
5 QM_ASSIGN ~2 0
6 ASSIGN !0($a), ~2
7 RETURN null
Run Code Online (Sandbox Code Playgroud)
2 $i = $b * $c; $a = $i ? $i : 0;
number of ops: 8
compiled vars: !0 = $i, !1 = $b, !2 = $c, !3 = $a
line # op fetch ext return operands
-------------------------------------------------------------------------------
1 0 MUL ~0 !1($b), !2($c)
1 ASSIGN !0($i), ~0
2 JMPZ !0($i), ->5
3 QM_ASSIGN ~2 !0($i)
4 JMP ->6
5 QM_ASSIGN ~2 0
6 ASSIGN !3($a), ~2
7 RETURN null
Run Code Online (Sandbox Code Playgroud)
3 $a = $b * $c ?: 0;:
number of ops: 5
compiled vars: !0 = $a, !1 = $b, !2 = $c
line # op fetch ext return operands
-------------------------------------------------------------------------------
1 0 MUL ~0 !1($b), !2($c)
1 ZEND_JMP_SET ~1 ~0
2 QM_ASSIGN ~1 0
3 ASSIGN !0($a), ~1
4 RETURN null
Run Code Online (Sandbox Code Playgroud)
这些OP代码清单由VLD扩展生成.
| 归档时间: |
|
| 查看次数: |
216 次 |
| 最近记录: |