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

Javascript JS-如果条件只有1,检查顺序是否会影响性能?,javascript,if-statement,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"); 这是: func

我在做一个项目,突然想到这个问题。我不确定是否已经有这样的帖子,但我没有找到

如果我有这个:

function checks(s) {
    if (s.length == 4 && s[0] == "a") {
        //action
    } else {
        //other action
    }
}
checks("a001");
checks("else");
checks("else");
checks("else");
这是:

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);
由于无论哪种方式,if语句都必须检查一次条件,如果动作的频率已知(例如,我知道else部分执行得最频繁)检查“非条件”是否会使代码运行更快,或者检查“非条件”是否甚至不会影响性能?(假设我正在构建一个复杂的node.js服务器,它具有许多此类功能。)

附加问题:大多数编程语言理论上也是这样吗?


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

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

详细回答:大多数Javascript引擎(Spider Monkey和V8)在内部使用一个可在运行时消除这些差异的脚本

在低级编程语言(读:C/C++和类似的语言)中,如果你能够预防,比如在中,你可能会得到一些东西,但是只有当你在进行内核编程或进行极端的微优化时,这种收获通常是值得的



从理论上讲,它是否起作用取决于您正在查看的编译器类型。如果您正在研究一个可以从代码跟踪中学习的编译器,例如,即时编译器,那么如果某个代码包是热点或不是热点,这将产生不同。如果您查看的是静态编译器,这可能意味着编译器可以通过阻止
jmp
,在其中一种情况下(如果
If
else
)使用更少的时钟周期,但这取决于编译器的实现。

这是可以忽略的,优化也没有意义。在这种情况下,我不会关心性能,除非此函数在循环中执行1亿次。我同意@zerkms的观点,在性能方面没有任何区别。即使在循环中执行1000亿次,我也不会关心。过早优化是万恶之源——唐纳德·克努特感谢你给出了一个有趣的答案。我今天学到了很多东西!:)