是三元运算符,if-else或逻辑或更快的javascript?

Jef*_*eff 36 javascript performance

在javascript,if-else,三元运算符或逻辑OR中哪种方法更快或响应更快?建议使用哪种,原因是什么?

cha*_*rts 126

似乎没有人做任何实际的分析.这是我使用的代码:

test = function() {
    for (var i = 0; i < 10000000; i++) {
        var a = i < 100 ? 1 : 2;

        /*
        if(i < 100) {
            var a = 1;
        }else{
            var a = 2;
        }
        */
    }
}

test();
Run Code Online (Sandbox Code Playgroud)

OS X Snow Leopard下,使用if/ elseblock而不是三元运算符可以使Google Chrome v21的性能提高1.52 .

作为一个非常重要的用例,综合实时音频在JavaScript中变得越来越普遍.当算法每秒运行44100次时,这种性能差异是一个大问题.

  • 谢谢.当所有这些人都说"过度优化"时,我讨厌几乎任何优化问题的合理原因. (17认同)
  • 刚刚在今天找到这个网站/测试:http://jsperf.com/ternary-vs-switch,它证实了我的发现.但是,当我使用三元运算符在Safari中运行测试时稍微快一些......我不想让事情变得简单:) (12认同)
  • 快点.至少大约三年前...我会自己运行链接的jsperf测试,因为这样的结果肯定会有所改变. (2认同)

And*_*ing 25

我不认为@charlie robert的测试是公平的

这是我的jsperf

结果:

  1. 严格平等是最快的
  2. 严格的三元速度慢了33%
  3. truthy falsy慢了49%
  4. 三元truthy falsy慢了55%
  5. 如果其他和三元大致相同.

正常的平等和正常的三元最慢.

严格等于:

var a = true, b;

if (a === true) {
  b = true;
} else {
  b = false
}
if (a === false) {
  b = true;
} else {
  b = false;
}
Run Code Online (Sandbox Code Playgroud)

三元严格等于

var a = true, b;

b = (a === true) ? true : false;

b = (a === false) ? true : false;
Run Code Online (Sandbox Code Playgroud)

简单平等

 var a = true, b;

    if (a == true) {
      b = true;
    } else {
      b = false;
    }

    if (a == false) {
      b = true;
    } else {
      b = false;
    }
Run Code Online (Sandbox Code Playgroud)

简单的三元平等

 var a = true, b;
    b = (a == true) ? true : false;

    b = (a == false) ? true : false;
Run Code Online (Sandbox Code Playgroud)

truthy/falsy

var a = true, b;
if (a) {
  b = true;
} else {
  b = false;
}

if (!a) {
  b = true;
} else {
  b = false;
}
Run Code Online (Sandbox Code Playgroud)

三元真实/虚假

var a = true, b;
b = (a) ? true : false;
b = (!a) ? true : false;
Run Code Online (Sandbox Code Playgroud)


And*_*are 18

速度差异可以忽略不计 - 使用您发现的更具可读性.换句话说,我高度怀疑代码中的瓶颈是由于使用了错误的条件构造.

  • 它应该是微不足道的.但我们需要测试以确保像IE这样的浏览器没有搞砸了. (7认同)
  • 虽然我同意这一点,但问题是问哪种方法更快.阿卡这个答案并没有真正回答这个问题. - 我真的很想知道@Kira提出的类似原因 (7认同)
  • 在JavaScript中处理数百万个数据时,速度非常重要 (6认同)
  • html5 游戏开发人员也将从中受益,我们经常使用 if 语句,因此可以肯定地说,每一毫秒都很重要。 (2认同)