javascript 中的三元运算符、if-else 或逻辑 OR 是否更快?

IT技术 javascript performance
2021-02-27 06:14:12

在 javascript、if-else、三元运算符或逻辑 OR 中,哪种方法更快或更灵敏?哪个是可取的,出于什么原因?

6个回答

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

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();

使用if/else块,而不是三元运算符的产生一个1.5 - 2倍的性能在提高谷歌浏览器V21OS X雪豹

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

今天刚找到这个网站/测试:jsperf.com/ternary-vs-switch这证实了我的发现。但是,当我使用三元运算符在 Safari 中运行测试时,速度会稍微快一些......不想让我们的事情变得简单:)
2021-04-20 06:14:12
在 Windows 8.1 上的 32Bit Firefox 27 中,64Bit 三元对我来说是最快的,切换最慢,if-else 介于两者之间。
2021-04-20 06:14:12
你的意思是性能提升(更快)还是时间增加(更慢)?
2021-05-06 06:14:12
快点。至少大约三年前......我会自己运行链接的 jsperf 测试,因为这样的结果肯定会发生变化。
2021-05-10 06:14:12
谢谢你。当几乎所有优化问题都有正当理由时,我讨厌所有这些人都说“过度优化”。
2021-05-12 06:14:12

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

这是我的jsperf

结果:

  1. 严格相等是最快的
  2. 严格的三进制慢 33%
  3. 真假慢 49%
  4. 三元 truey falsy 慢 55%
  5. if else 和三元大致相同。

正常相等和正常三元最慢。

严格等于:

var a = true, b;

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

三元严格等于

var a = true, b;

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

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

简单的平等

 var a = true, b;

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

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

简单三元等式

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

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

真/假

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

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

三元真/假

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

速度差异可以忽略不计 - 使用您认为更具可读性的任何一个。换句话说,我非常怀疑代码中的瓶颈是由于使用了错误的条件构造。

在 JavaScript 中处理数百万数据时,速度很重要
2021-04-26 06:14:12
html5 游戏开发人员也将从中受益,我们经常使用 if 语句,因此可以很安全地说每一毫秒都很重要😭可悲。
2021-04-28 06:14:12
应该可以忽略不计。但是我们需要测试以确保像 IE 这样的浏览器没有搞砸。
2021-05-05 06:14:12
虽然我同意这一点,但问题是问哪种方法更快。也就是这个答案并没有真正回答这个问题。- 我真的很想知道@Kira提出的类似原因
2021-05-05 06:14:12

对于上面查理罗伯茨的回答,我要补充说:

以下链接给出了一些精辟的答案;Firefox 中开关的结果最引人注目:http : //jsperf.com/if-else-vs-arrays-vs-switch-vs-ternary/39

那些质疑为什么有人会研究这种程度的优化的人最好研究 WebGL!

三元运算符只是语法糖,而不是性能助推器。

根据基准,它是 - jsperf.com/ternary-vs-simple-if-else
2021-05-10 06:14:12