订购if / else if语句的最快/最合适的方式

时间:2011-08-31 19:07:53

标签: php benchmarking

在PHP中,if / else if语句是否有最快/正确的排序方式?出于某种原因,在我的脑海中,我喜欢认为第一个if语句应该是预期的“最受欢迎”符合条件,然后是第二个等等。但是,它真的重要吗?如果第二个条件是最受欢迎的选择(意味着系统必须始终读取第一个条件),是否会影响速度或处理时间

例如:

if ("This is the most chosen condition" == $conditions)
{

}
else if ("This is the second most chosen condition" == $conditions)
{

}
else if ("This is the third most chosen condition" == $conditions)
{

}

5 个答案:

答案 0 :(得分:6)

速度方面,它不会产生任何影响...不是一个明显的...订单确实计数(将最常用的条件放在第一位的速度明显更快),但它并不重要。选择为修改和维护代码提供最佳可读性的顺序。他们以后会感谢你。

编辑: 另外,请考虑一下:

我的功能将以25%的几率返回。 我更喜欢写作:

if ( $chance25 )
    return;
else if ( $chance40 )
    doSomething();
else if ( $chance30 )
    doSomethingElse();
else if ( $chance5 )
    doSomethingElse2();

而不是:

if ( $chance40 )
    doSomething();
else if ( $chance30 )
    doSomethingElse();
else if ( $chance25 )
    return;
else if ( $chance5 )
    doSomethingElse2();

按功能排序更好......

EDIT2:

一种尺码并不适合所有人。如果您的条件是返回布尔值的方法,请根据方法运行的速度和机会来排序它们。我想这不是一个好的答案,你需要适应。例如,如果我的$ chance25被方法reallySlowMethodDoNotUseUnlessYouReallyHaveTo()替换,我肯定会最后检查它。 :d

答案 1 :(得分:3)

我同意@Luchian的观点。您的主要关注点应该是代码的可读性

在优化代码之前,您应该对应用程序进行概要分析。您如何订购您的病情在很大程度上取决于“每个条件”花费了多少时间。

我们举一个例子:

         Execution time - %ge called
Case 1 - 50 seconds (80% of time)
Case 2 - 10 seconds (15% of time)
Case 3 - 1 second    (5% of time)

100 runs:

Order A (In the order of "how often a condition is executed")
Case 1, Case 2, Case 3 = (80 * 50) + (15 * 60) + (5 * 61) = 5205 seconds

Order B (In the order of "execution times")
Case 3, Case 2, Case 1 = (5 * 1) + (15 * 11) + (80 * 61) = 5050 seconds

答案 2 :(得分:1)

您的应用程序可能是一个Web应用程序(因为这是PHP最常用的用法),所以大多数时候它等待外部资源,如数据库,文件访问或Web服务。除非你在循环中执行了数千次,或者在递归方法中,否则首先执行哪种条件并不重要。努力寻找易于阅读的代码。

答案 3 :(得分:0)

取决于您的操作偏好

您可能希望条件2激活而不是条件1,反之亦然

$value=25;

if ($value > 20)
{
$value=200;
}
else if ($value < 50)
{
$value=5;
}

答案 4 :(得分:0)

如果您只是针对多个可能的文字值检查$conditions的值,而不是if/else,请使用switch

switch ($conditions) {
    case "This is the most chosen condition":
        // do stuff
        break;
    case "This is the second most chosen condition":
        // do stuff
        break;
    case "This is the third most chosen condition":
        // do stuff
        break;
    default:
        // do stuff
}

如果最常见的情况是第一次,它将不必评估任何其他情况,因此会更快,但差异将非常小,以至于它确实无论如何都不重要。通常你应该考虑速度的可读性。