如果不是其他语句顺序,则总是最常为true的语句优先?性能提高多少?

时间:2019-06-24 18:37:13

标签: php performance optimization

我有一个关于PHP /一般性能差异的问题,按if / elseif / else语句的顺序排列。 为了提高性能,首先以最真实的语句顺序运行if / elseif / else语句是有意义的。

现在我的问题是,没有elseif的简单if / else语句怎么办? 如果政治家if为假,并且跳转到else情况,因为默认情况下它实际上不检查任何内容,这会有所不同吗?还是通过跳转到else而不是在if语句内部来增加运行时间?如果有的话,有什么不同?

编辑:

@MonkeyZeus,谢谢。

是的,这就是我的意思。但是在这种情况下:

if(x>10) {y = 10}
else {y = 0}
//or
if(x!>10) {y = 0}
else {y = 10}

如果它总是检查一个语句,那么跳转到其他语句是否有所不同?因此,如果可以说情况1发生的频率更高,那么我就这样,如果情况2发生的频率更高,那么我的代码就这样。结果是相同的,但是在一种情况下,它在if情况下跳了80%的时间,在另一种情况下,在其他情况下跳了80%的时间。

2 个答案:

答案 0 :(得分:1)

正如其他人所述,从实践的角度来看,适当的基准测试是您了解的最佳方法。但是从理论上讲,您的示例(或任何其他示例)之间应该没有任何区别,因为在许多代码执行优化中,branch prediction是其中之一。这样可以确保在给定的连续迭代中,如果通过if的相同分支,执行将开始预测进一步的迭代也将通过该分支,并开始从该分支中​​预执行代码。

对于其他情况,我不太确定,但我认为如果对每一行代码都进行缓存预测,这是相似的。

答案 1 :(得分:-2)

在一天结束时,您只是在问“为我设置基准,请给我。”

所以你去了:

PHP 7.3.5 @ http://sandbox.onlinephpfunctions.com/

<?php
$x = 1;
$iterations = 10000000; // 10 million

$start = microtime(true);
for( $i = 0; $i < $iterations; ++$i )
{
}
echo microtime(true) - $start; // 0.071332216262817 seconds
echo PHP_EOL;

$start = microtime(true);
for( $i = 0; $i < $iterations; ++$i )
{
    if( $x < 10 ){}
}
echo microtime(true) - $start; // 0.10689616203308 seconds

通过不需要的if(){}

需要花费大约40%的时间