最近在检查代码性能问题的时候,发现了一种现象
function generator(size) {
let obj = {}
for (let i = 0; i < size; i++) {
obj['key' + i] = 'key' + i
}
return obj
}
function execute(keySize, length) {
let obj = generator(keySize)
let res = []
console.time('execute')
for (let i = 0; i < length; i++) {
res.push({
...obj
})
}
console.timeEnd('execute')
}
function execute2(keySize, length) {
let obj = generator(keySize)
let res = []
console.time('execute2')
for (let i = 0; i < length; i++) {
res.push(Object.assign({},obj))
}
console.timeEnd('execute2')
}
execute(20, 20000) // execute: 173.281982421875ms
execute2(20, 20000) // execute2: 18.531005859375ms
execute(50, 20000) // execute: 424.162841796875ms
execute2(50, 20000) // execute2: 47.494873046875ms
execute(50, 200000) // execute: 4083.7490234375ms
execute2(50, 200000 // execute2: 379.589111328125ms
execute(50, 10000000) // execute: 59308.050048828125ms
execute2(50, 10000000) // execute2: 61014.080078125ms
execute(50, 2000000) // execute: 54889.18994140625ms
execute2(50, 2000000) // execute2: 12060.424072265625ms
execute(200, 200000) // execute: 26645.94189453125ms
execute2(200, 200000) // execute2: 5789.861083984375ms
从结果看到,Object.assign的性能要比扩展运算符要好,最后一个例子不够稳定,有时快有时慢,暂时没有太多想法。