条件分支效率

时间:2015-06-04 14:45:12

标签: performance conditional-statements

我们参与了关于如何提高代码效率的讨论,并讨论了if (a==1) { //... tasks } else if (a==2) { //... tasks } ... } else if (a==9) { //... tasks } 上的分支主题,这就出现了。

考虑以下代码:

if (a<=4) {
    if (a==1) {
        //... tasks
    } else if (a==2) {
        //... tasks
    }
    ...
} else {
    if (a==5) {
        //... tasks
    } else if (a==6) {
        //... tasks
    }
    ...
}        

讨论证明,上层代码的效率低于下面的代码,因为必须对代码的下半部分进行比较。

考虑这个选择:

a=5,6,7, or 8

在上述情况下,检查switch需要较少的比较次数,显然效率更高。但我从来没有遇到过使用这种逻辑的代码。大多数代码通常使用前一代码段中提到的if语句或正常"{ click : myClickFunction, render : myRenderFunction }" 条件。后一个代码真的更有效还是需要相同的时间?

编辑:以上只是一个例子。一般的想法是将不相交的条件集与条件库区分开来,然后根据不相交的原因应用额外的条件。

1 个答案:

答案 0 :(得分:3)

是的,第二个代码在普通情况下效率更高。

您通常不会看到此类代码有三个原因:

  1. 改善相对较小。数量取决于您的CPU,但您只保存一个数字的CPU周期数。

  2. 对代码可读性的影响很严重。

  3. 需要优化的代码量通常少于编写代码的百分之一。

  4. 你知道,对于绝大多数代码来说,它根本就不值得。

    另请注意,第二个代码可能比第一个代码:如果a == 1是绝大多数情况,则第二个代码不必要地添加第二个代码。关键路径。如果不了解您的关键路径,就不要优化。