记录一个关于扩展运算符与Object.assign的性能问题

最近在检查代码性能问题的时候,发现了一种现象

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的性能要比扩展运算符要好,最后一个例子不够稳定,有时快有时慢,暂时没有太多想法。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。