Javascript比较运算符,是否比===更有效?
最近有人告诉我,三重相等运算符更有效,因为它在比较之前不会尝试转换任何变量。从未考虑过性能影响 有没有人知道各种比较运算符或其他可能减慢框架速度的常见JS运算符的性能 是否存在这是一个因素的复杂对象类型Javascript比较运算符,是否比===更有效?,javascript,performance,Javascript,Performance,最近有人告诉我,三重相等运算符更有效,因为它在比较之前不会尝试转换任何变量。从未考虑过性能影响 有没有人知道各种比较运算符或其他可能减慢框架速度的常见JS运算符的性能 是否存在这是一个因素的复杂对象类型 我意识到这可能只与边缘案例有关,但如果没有具体数据,很难说。这并不是我问题的答案,只是一个边缘示例: 对于字符串和浮点(例如:0.035==“0.035”)之间的100K或更多比较,显然有大约1000%或10倍的明显性能差异。在铬v77上测试 如果有一个框架在幕后进行大量比较,我可以看到这会如何
我意识到这可能只与边缘案例有关,但如果没有具体数据,很难说。这并不是我问题的答案,只是一个边缘示例: 对于字符串和浮点(例如:0.035==“0.035”)之间的100K或更多比较,显然有大约1000%或10倍的明显性能差异。在铬v77上测试 如果有一个框架在幕后进行大量比较,我可以看到这会如何影响它的“清晰”感觉。但这也可能完全无关。我没有任何用于框架的数据 有关示例,请参见下面的代码
print('string vs float comparison operator performance')
let start = Date.now();
let loopCount = 10000000;
let appxLoopCostRatio = 2857;
for (let i=0; i < loopCount; i++) {
let x = Math.random();
let y = Math.random().toString();
if (x == y) count++;
}
let mid = Date.now();
for (let i=0; i < loopCount; i++) {
let x = Math.random();
let y = Math.random().toString();
if (x === y) count++;
}
let mid2 = Date.now();
//no comparison
for (let i=0; i < loopCount; i++) {
let x = Math.random();
let y = Math.random().toString();
}
let finish = Date.now();
let a, b, cost;
a = mid-start;
b = mid2-mid;
cost = finish-mid2;
print('runtime == comparison:', mid-start);
print('runtime === comparison:', mid2-mid);
print('appx cost of variable generation:', finish-mid2);
let expectedCost = (loopCount / appxLoopCostRatio);
let TcCost = (b-cost < (expectedCost * 0.05)) ? (expectedCost * 0.05) : b-cost;
print(` === is more efficient by ${Math.floor((a-cost)/TcCost) * 100 }%`)
print('string vs float comparison operator performance')
让我们开始=Date.now();
设loopCount=10000000;
设appxLoopCostRatio=2857;
for(设i=0;i
应该是,因为它执行的操作较少<代码>=如果两个参数的类型不同,则在比较之前执行类型转换。下面是伪代码
function doubleEquals(a, b) {
[a, b] = coerceTypes(a, b)
return compareSameType(a, b)
}
function tripleEquals(a, b) {
if (!areSameType(a, b)) {
return false
}
return compareSameType(a, b)
}
但是,如果将
=
和=
与相同类型的两个输入进行比较,差异应该非常小,甚至为零,因为不需要转换。。。。当微秒对你很重要时:与几乎所有这些微基准相似“这个简单的技巧可以提高你的性能!”蛇油故事:不值得你花时间,不会成为你程序的瓶颈。通常更糟糕的是,重构代码以符合这些要求通常会降低代码的可读性,从而造成真正的瓶颈(由于编程缺陷,可读性差导致)。这样的测试结果是不可预测的,因为很多事情都可能在幕后发生。JS运行时通过许多阶段“就地”编译和优化代码。每个编译器能够实现(或决定实现)的优化级别以及编译时间本身可能会考虑在内