【发布时间】:2019-06-24 18:37:13
【问题描述】:
我有一个关于 PHP/if / elseif / else 语句顺序的一般性能差异的问题。 首先按照最常见的正确语句的顺序运行 if / elseif / else 语句以减少检查以提高性能是有意义的。
现在我的问题是,没有 elseif 的简单 if/else 语句呢? 如果语句 if 为 false 并且它跳转到 else 情况,它实际上没有检查任何东西,因为它是默认值,这有什么不同吗?或者通过跳转到 else 而不是在 if 语句内是否还增加了运行时的额外时间?如果是这样,它会产生多大的影响?
编辑:
@MonkeyZeus 感谢这个词。
是的,这就是我的意思的一部分。但在这种情况下:
if(x>10) {y = 10}
else {y = 0}
//or
if(x!>10) {y = 0}
else {y = 10}
如果它跳转到 else 是否有区别,因为它总是检查一个语句?因此,如果让我们说案例 1 更频繁地发生,我会走那条路,如果案例 2 更频繁地发生,我会使用代码走这条路。结果是一样的,但在一种情况下,它在 if 情况下跳跃 80% 的时间,在另一种情况下,在 else 情况下跳跃 80%。
【问题讨论】:
-
一个 CPU 滴答声或多或少不会产生影响,但如果您的条件或代码块中有大量 CPU 操作,那么您需要考虑何时执行。
-
如果有任何差异,它永远不会对您的应用程序产生任何可衡量的影响。如果您想提高性能,请运行分析器以查看您的瓶颈实际在哪里。
-
如果
$x更频繁地为假,您将按比较顺序看到它:if(someSlowFunc() && $x)比if($x && someSlowFunc())慢,因为如果$x为假,func 将不会运行。 -
好吧,我知道在一次调用中它没有太大区别,但是如果我得到一个包含 10000 次调用的循环,那么 0.01 毫秒会产生影响。
-
您正在寻找“短路评估”,是的,根据迭代次数,绝对可以获得性能优势。 en.wikipedia.org/wiki/Short-circuit_evaluation。这不仅仅是跳入
else{}的问题,if(){}内部的比较顺序也会产生很大的影响。
标签: php performance optimization