如果表现不好

时间:2014-05-16 12:25:37

标签: javascript performance if-statement

我为具有相同逻辑的三个简单if else语句运行性能测试jsperf

测试if1:

var a = "1";
if (a == "1") {
  a = "1"
} else {
  a = "2"
}

测试if2:

    var a = "1";
    if (a == "1")
      a = "1"
    else
      a = "2"

测试if3:

var a = "1";
a == "1" ? a="1" : "2";

有人可以告诉我为什么测试if1是最快的三个?

第一次将测试if1与测试if2进行比较并测试if1是否为faseter。在我检查if1并测试if3并测试if1再次更快之后。现在我比较所有这些并测试if2是否更快。

All three together

在Chrome 34.0.1847上测试

2 个答案:

答案 0 :(得分:11)

您是否多次运行它们以确定您是否始终获得相同的结果?

即使你这样做,他们可能是一个非常小的差异。这种差异永远不会在整个系统的整体性能上产生实际差异。尝试通过这些简单的语法更改进行优化将是过早优化的一个非常糟糕的情况,这会使您的代码更难阅读,并且浪费时间,因为它不会给您带来任何实际好处

现在我希望您明白您的问题实际上是一个“错误的问题”,但是如果您仍然想要为什么第一个测试执行速度最快(如果确实如此)的答案,那么将取决于执行代码的JavaScript引擎的一些深层细节。 JS引擎现在非常复杂,具有大量的优化,所以你无法真正说出将为一段代码发出什么CPU指令。在Chrome的下一次小更新中,由于Chrome JS引擎中的某些变化,其他测试可能会突然变得更快。

答案 1 :(得分:1)

在您的三种情况下没有有意义的性能差异 - 差异大约为1%。

请注意,在第三种情况下,您未能将a设置为“2”,而只是返回“2”。

括号的存在与否极不可能对性能产生任何重大影响,或者更可能没有任何影响。这是一次性的解析时间问题。三元形式,即您的第三种情况,在本质上与前两种情况在逻辑上相同。实际上,大多数minifiers会将你的案例1和2变成一个三元运算符。