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

JS - If condition with only 1 else, does checking order affect performance?

本文关键字:顺序 检查 影响 性能 条件 如果 JS-      更新时间:2023-09-26

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

假设我有这个:

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语句都必须检查一次条件,操作的频率是否已知(例如,我知道其他部分最常执行)检查"not conditions"是否会使代码运行得更快,或者检查"not condition"是否甚至不会影响性能(假设我正在构建一个复杂的node.js服务器,该服务器具有许多此类功能。)

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

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

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

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

在低级别编程语言(读作:C/C++等)中,如果能够防止分支预测错误,您可能会获得一些东西,比如在C++代码中,但只有当您正在进行内核编程或进行极端的微优化时,这种增益通常才是值得的。


从理论上讲,它是否有影响取决于你所关注的编译器是什么类型的。如果你正在关注一个可以从代码跟踪中学习的编译器,例如实时编译器,那么如果某个代码包是否是热点,它就会产生影响。如果您查看的是静态编译器,这可能意味着编译器在其中一种情况下(ifelse)可以通过阻止jmp来减少一个时钟周期,但这将取决于编译器实现。