我有一个关于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%的时间。
答案 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(){}