在 javascript、if-else、三元运算符或逻辑 OR 中,哪种方法更快或更灵敏?哪个是可取的,出于什么原因?
javascript 中的三元运算符、if-else 或逻辑 OR 是否更快?
IT技术
javascript
performance
2021-02-27 06:14:12
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倍的性能在提高谷歌浏览器V21下OS X雪豹。
作为一个非常重要的用例,使用 JavaScript 合成实时音频变得越来越普遍。当算法每秒运行 44100 次时,这种类型的性能差异是一个大问题。
我不认为@charlie robert 的测试是公平的
这是我的jsperf
结果:
- 严格相等是最快的
- 严格的三进制慢 33%
- 真假慢 49%
- 三元 truey falsy 慢 55%
- 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;
速度差异可以忽略不计 - 使用您认为更具可读性的任何一个。换句话说,我非常怀疑代码中的瓶颈是由于使用了错误的条件构造。
对于上面查理罗伯茨的回答,我要补充说:
以下链接给出了一些精辟的答案;Firefox 中开关的结果最引人注目:http : //jsperf.com/if-else-vs-arrays-vs-switch-vs-ternary/39
那些质疑为什么有人会研究这种程度的优化的人最好研究 WebGL!
三元运算符只是语法糖,而不是性能助推器。