In certain versions of node, a += b
is significantly slower than a = a + b
, but similar in the browser and later versions. What causes them to run so differently?
node v6.10.0 (V8 5.1.281.93)
, 75% slower, or reverse is 4x fasternode v8.0.0 (V8 5.8.283.41)
, 86% slower, or reverse is 7x fasternode v8.2.1 (V8 5.8.283.41)
, 86% slower, or reverse is 7x fasternode v8.3.0 (V8 6.0.286.52)
, similarnode v8.7.0 (v8 6.1.534.42)
, similarnode v8.9.2 (V8 6.1.534.48)
, similarchrome 62.0.3202.94 (V8 6.1.534.42)
, similarsafari 11.0.1
, similar
Edit: found that it's related to node's v8 engine update from 5 to 6.
Snippet:
const iter = 10 * 1000 * 1000
function one() {
let i = 0
let sum = 0
while (i < iter) {
sum += i
i++
}
}
function two() {
let i = 0
let sum = 0
while (i < iter) {
sum = sum + i
i++
}
}
let time
const tries = 10
time = Date.now()
for (let i = 0; i < tries; i++) {
one()
}
console.log('one: ' + String(Date.now() - time))
time = Date.now()
for (let i = 0; i < tries; i++) {
two()
}
console.log('two: ' + String(Date.now() - time))