为什么total = total + i比total + = i快得多?这是我多次运行的代码:
var iterations = 1000000;
console.time('Operation total += i');
var total = 0;
for(var i = 0; i < iterations; i++ ){
total += i;
};
console.timeEnd('Operation total += i');
console.time('Operation total = total + i');
var total = 0;
for(var i = 0; i < iterations; i++ ){
total = total + i;
};
console.timeEnd('Operation total = total + i');
以下是一些示例输出:
答案 0 :(得分:11)
我运行代码10次,使用相同的迭代次数和更多的迭代次数。
我得到了这个结果:
操作总数+ = i:23.000ms
操作总数=总+ i:19.000ms
在这种情况下,总+ i比总数+ = i
快我得到了这个结果:
操作总数+ = i:25.000ms
操作总数=总+ i:31.000ms
在这种情况下,总+ i慢于总数+ = i
我运行代码的次数增加了10倍,结果类似:
total+=i | total+i | diff
71 76 -5
23 19 4
28 19 9
23 18 5
72 76 -4
29 60 -31
35 23 12
72 74 -2
23 19 4
78 76 2
操作总数+ = i:17324.000ms
操作总数=总+ i:15669.000ms
操作总数+ = i:15306.000ms
操作总数=总+ i:15401.000ms
我也执行了10次代码。我得到了相同的结果,有时第一个更快,有时第二个是。
因此,在我看来,没有证据表明总+ +比总数+ = i快。
答案 1 :(得分:2)
我使用以下基准测试代码在Benchmark.js库上运行Node.js的基准测试:
var iterations = 1000000;
suite.add('+= i', function() {
var total = 0;
for(var i = 0; i < iterations; i++ ){
total += i;
};
})
.add('= total +i', function() {
var total = 0;
for(var i = 0; i < iterations; i++ ){
total = total + i;
};
})
我根本没有任何性能差异。由于Node.js和谷歌Chrome都使用V8 JS引擎,可能还有别的东西在继续。或许特定于V8的特定版本?或者我们的任何一个基准测试都出了问题?
C:\test>node bench.js
+= i x 253 ops/sec ±1.37% (68 runs sampled)
= total +i x 254 ops/sec ±1.33% (70 runs sampled)
Fastest is = total +i,+= i
C:\test>node bench.js
+= i x 241 ops/sec ±3.03% (63 runs sampled)
= total +i x 246 ops/sec ±1.52% (67 runs sampled)
Fastest is = total +i,+= i
C:\test>node bench.js
+= i x 249 ops/sec ±2.04% (67 runs sampled)
= total +i x 249 ops/sec ±1.45% (68 runs sampled)
Fastest is = total +i,+= i
话虽如此,基于我的多重结果,我会说性能没有差异。