Javascript 如果其他性能

Javascript 如果其他性能,javascript,performance,if-statement,Javascript,Performance,If Statement,我使用相同的逻辑为三个简单的if-else语句运行性能测试: 测试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是三个测试中最快的吗 我

我使用相同的逻辑为三个简单的if-else语句运行性能测试:

测试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是Faster。在我用测试if3检查测试if1之后,测试if1再次加快。现在我比较了所有这些,并测试if2是否更快


在Chrome 34.0.1847上测试,您是否多次运行它们以查看是否始终获得相同的结果

即使你这样做了,它们也可能是非常微小的差别。这种差异永远不会对整个系统的总体性能产生实际影响。试图通过这些琐碎的语法更改进行优化是一种非常糟糕的过早优化,这会使代码更难阅读,而且是浪费时间,因为它不会给您带来任何真正的好处


现在,我希望您理解您的问题实际上是一个“错误的问题”,但如果您仍然想知道为什么第一个测试执行得最快(如果确实如此),那将取决于执行代码的JavaScript引擎的一些深层细节。现在的JS引擎非常复杂,需要进行大量的优化,因此您无法真正判断一段代码将发出什么CPU指令。在Chrome的下一次小更新中,由于Chrome的JS引擎发生了一些变化,其他测试可能会突然变得更快。

在这三种情况下,性能没有显著差异——差异大约为1%

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


括号的存在或不存在极不可能对性能产生任何重大影响,或者更可能不会产生任何影响。这是一个一次性的问题。三元形式,你的第三种情况,在逻辑上与前两种情况相同。事实上,大多数缩微器会将案例1和案例2转换为三元运算符。

您运行了多少次迭代?差异有多大?你能给出一个实际jsperf测试的链接吗?哪一个执行得最快也可能在很大程度上取决于使用哪个浏览器。可能是因为#1中编译器的回溯明显较少。另外两个语句不使用分隔符,编译器必须回溯以将相关语句与条件语句连接起来。再说一次,这只是理论。你为什么会在乎呢?这能解决任何问题吗?您是否有性能问题?是什么让你认为条件的样式可能是原因呢?试过几次运行你提供的测试用例——每次都是不同的测试用例。这是统计上的错误——他们是一致的。过早优化是一种非常糟糕的反模式。如果存在性能问题,请了解瓶颈在哪里。