JS - 如果条件只有1,则检查顺序会影响性能吗?

Dan*_*ung 5 javascript if-statement

我正在研究一个项目,这个问题突然出现在我脑海中.我不确定是否已有这样的帖子,但我找不到.

如果我有这个:

function checks(s) {
    if (s.length == 4 && s[0] == "a") {
        //action
    } else {
        //other action
    }
}
checks("a001");
checks("else");
checks("else");
checks("else");
Run Code Online (Sandbox Code Playgroud)

还有这个:

function checkb(b) {
    if (b) {
        //action
    } else {
        //other action
    }
}
checkb(true); //Suppose i'm passing these through another function
checkb(false); //so it makes sense for me doing these
checkb(false);
checkb(false);
Run Code Online (Sandbox Code Playgroud)

由于if语句要么必须检查一次条件,如果动作的频率是已知的(例如我知道其他部分最常执行).检查"非条件"是否使代码运行得更快,或者"无条件"的检查是否甚至不影响性能?(假设我正在构建一个复杂的node.js服务器,它具有许多这类功能.)

补充问题:大多数编程语言在理论上也做同样的事情吗?

我只是想知道它是否会影响性能(实际上或理论上).

mus*_*_ut 6

简短的回答:不,它不会影响计算时间。

长答案:大多数 Javascript 引擎(Spider Monkey 和 V8)内部使用即时编译器,它将在运行时消除这些差异。

在低级编程语言(阅读:C/C++ 等)中,如果您能够防止分支错误预测(例如在C++ 代码中),您可能会有所收获,但只有在进行内核编程时,这种收获通常才值得或者进行极端的微观优化。


理论上,它是否有影响取决于您正在寻找哪种编译器。如果您正在寻找一个可以从代码跟踪中学习的编译器,例如即时编译器,那么某个代码块是否是热点将会产生影响。如果您正在查看静态编译器,这可能意味着编译器可以通过阻止 a 来在其中一种情况(或if或)中使用更少的时钟周期,但这取决于编译器的实现。elsejmp