在javascript,if-else,三元运算符或逻辑OR中哪种方法更快或响应更快?哪个是可取的,出于什么原因使用?
答案 0 :(得分:117)
似乎没人做任何实际的分析。这是我使用的代码:
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
块代替三元运算符会在 Google Chrome v21中产生 1.5 - 2x 性能提升 OS X Snow Leopard下的 。
作为非常重要的一个用例,综合实时音频在JavaScript中变得越来越普遍。当算法每秒运行44100次时,这种性能差异是一个大问题。
答案 1 :(得分:21)
我没想到@charlie robert的考试是公平的
结果:
正常等于和正常三元最慢。
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;
答案 2 :(得分:17)
速度差异可以忽略不计 - 使用您发现的更具可读性。换句话说,我高度怀疑代码中的瓶颈是由于使用了错误的条件构造。
答案 3 :(得分:2)
以下链接提供了一些精辟的答案; Firefox中交换机的结果是最引人注目的: http://jsperf.com/if-else-vs-arrays-vs-switch-vs-ternary/39
那些质疑为什么有人会调查这种程度的优化的人会很好地研究WebGL!
答案 4 :(得分:1)
三元运算符只是语法糖,而不是性能助推器。
答案 5 :(得分:0)
我认为这将有助于找到 if..else 和三元运算符的确切速度差异。我检查了三元和 if else 的不同类型的嵌套条件。它显示三元比 if..else 语句(Nodejs 控制台、Chrome 和 Edge)更快,但在 Firefox 的情况下,显示相反的结果(Windows 10)。下面的代码给出了两个测试的平均 40 毫秒。
const IfTest = () => {
let sum = 0;
for (let x = 0; x < 1e8; ++x) {
if (x % 2 === 0)
sum += x;
else if (x > 1e8 / 2)
sum += 5;
else
sum += 6;
}
};
const TernaryTest = () => {
let sum = 0;
for (let x = 0; x < 1e8; ++x) {
sum += x % 2 === 0 ? x : x > 1e8 / 2 ? 5 : 6;
}
};
const initTest = (e) => {
let [tAverage, ifAverage] = [0, 0];
for (let x = 0; x < e; ++x) {
const date = new Date;
IfTest();
ifAverage += new Date - date;
}
console.log("if execution time:", ifAverage / e);
for (let x = 0; x < e; ++x) {
const date = new Date;
TernaryTest();
tAverage += new Date - date;
}
console.log("ternary execution time:", tAverage / e);
};
initTest(40);
答案 6 :(得分:-1)
速度没有区别。
有些人更喜欢if / else的可读性。就个人而言,只要逻辑很小,就可以在一行上理解,我就会使用三元运算符。
答案 7 :(得分:-1)
我正在使用另一种语法:
var a = true,
b;
b = (a == false)
? true // if a == false, b = true
: false; // else: a == true so b = false
/* Equivalent of
if(a == true)
var b = true;
else
var b = false;
有些人喜欢我的代码,并告诉我它很容易阅读。