作者tails32100 (Tails)
看板PHP
标题[请益] 关於三元运算子
时间Sun Jul 28 23:40:14 2013
应该是个蠢问题吧
if ($bool)
{
$value = 'true';
}
else
{
$value = 'false';
}
跟
$value = $bool ? true : false;
执行结果是相等的
听说C在这两个写法编译结果和反编译也是一模一样的
假设PHP也是相同的情况
那两个写法的效能应该会是一样的
再来其实想问的是
$value = $bool ? true : false;
和
$value = !$bool ? false : true;
执行的效能也会是一样的吗?
感谢 <(_ _)>
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 59.126.68.4
1F:→ hSATAC:你怎麽不 benchmark 看看就知道了呢 07/28 23:52
其实小弟根本不会 benchmark 所以也不知道下面测的是不是正确的
刚用 microtime() 去计算开始和结束的时间差
是发现三元运算子有 not 比没 not 的时间多了约5%的时间
if else 反而比三元运算子快了约2%的时间
当然 not 也是多了约5%的时间
刚刚google也找不到有类似的讨论
也不敢妄下定论说这个结果是可参考的
所以想请问 hSATAC 大哥,您 benchmark 出来的结果为何呢?
还是说您已经有最佳解可以提供给小弟参考吗?
※ 编辑: tails32100 来自: 59.126.68.4 (07/29 00:26)
2F:→ rickysu:!$bool 得多做一次 not 当然比较慢阿。 07/29 09:29
3F:→ rickysu:此外 if else 跟三元运算,在 php 中编译出来的opcode 07/29 09:31
4F:→ rickysu:是不同的,如果有兴趣研究的话可以 google vld 吧。 07/29 09:31
感谢您,这答案有帮助到小弟了 :)
5F:→ hSATAC:我没有做耶,谢谢你的分享罗 07/29 13:14
6F:→ hSATAC:我个人的看法的话,在这个层级的优化上,不如把心力放在 07/29 13:15
7F:→ hSATAC:可读性上... 07/29 13:15
呵呵,所以开头就说这是个蠢问题了啊
小弟当然知道可读性的重要,也都有在做
只是对於上述问题不想不求甚解罢了
另外
您可以直接回答「先别管优化了,你听过可读性吗」
这答案小弟当然可以欣然接受
但叫别人做 benchmark ,然後别人该做的都做了,却没有提供任何参考结果
到最後还是不知道结果为何
8F:→ hSATAC:你怎麽不 benchmark 看看就知道了呢07/28 23:52
实际上结果就是:做了 benchmark 小弟还是不知道答案
虽然现在讲是有点马後炮,不过这句话建议可以省略啦
最後还是谢谢您提醒小弟可读性和优化之间的平衡
※ 编辑: tails32100 来自: 118.170.27.17 (07/29 15:31)
9F:→ hSATAC:你不是已经做出结果了吗 @@? 有 not 多 15% 时间呀 07/29 18:56
先郑重说声抱歉,当初小弟心算算错%数
应该是原本的三分之一以下才对
已修正原文
如果是50%的差距当然就立马可以确定not是会有影响的
但5%的差距其实有点小,会觉得好像是电脑故意测不准一样
所以还是会想再多加确认,不管是数据上证明或是理论上说明都可以的
总之 再次谢谢 rickysu 大的说明和 hSATAC 大的详解 <(_ _)>
※ 编辑: tails32100 来自: 59.126.68.4 (07/29 23:03)