Skip to content

perf: improve copy object time speed

Rodrigo Muino Tomonari requested to merge github/fork/himself65/feature into master

example code:

const currentNodeVersion = process.versions.node
const semver = currentNodeVersion.split('.')
const major = semver[0]
console.log(`major version: ${major}`)

const maxNum = 10000
let data = {}

for (let i = 0; i < maxNum; i++) {
  data[i] = Math.random()
}
data = Object.assign({}, data)

function copyObject1(source) {
  const target = {}
  for (const key in source)
    target[key] = source[key]
  return target
}

function copyObject2(source) {
  return { ...source }
}

function copyObject3(source) {
  return Object.assign({}, source)
}

for (const idx of Array(10).keys()) {

  console.log(`${idx + 1} time(s)`, '')

  console.time('test-1')
  const data1 = copyObject1(data)
  console.timeEnd('test-1')

  console.time('test-2')
  const data2 = copyObject2(data)
  console.timeEnd('test-2')

  console.time('test-3')
  const data3 = copyObject3(data)
  console.timeEnd('test-3')

  console.log('\n')
}


// C:\Users\himself65\Desktop\Github\test>node index.js
// major version: 12
// 1 time(s)
// test-1: 1.509ms
// test-2: 0.092ms
// test-3: 2.558ms
//
//
// 2 time(s)
// test-1: 2.279ms
// test-2: 0.018ms
// test-3: 2.679ms
//
//
// 3 time(s)
// test-1: 0.576ms
// test-2: 0.060ms
// test-3: 3.591ms
//
//
// 4 time(s)
// test-1: 0.391ms
// test-2: 0.016ms
// test-3: 2.174ms
//
//
// 5 time(s)
// test-1: 1.098ms
// test-2: 0.019ms
// test-3: 2.449ms
//
//
// 6 time(s)
// test-1: 0.388ms
// test-2: 0.015ms
// test-3: 2.747ms
//
//
// 7 time(s)
// test-1: 0.824ms
// test-2: 0.268ms
// test-3: 2.473ms
//
//
// 8 time(s)
// test-1: 0.545ms
// test-2: 0.052ms
// test-3: 2.834ms
//
//
// 9 time(s)
// test-1: 0.409ms
// test-2: 0.016ms
// test-3: 3.542ms
//
//
// 10 time(s)
// test-1: 0.902ms
// test-2: 0.042ms
// test-3: 2.425ms
//

there have faster time speed

and my pc configuration is Surface Pro 5 (i7-7660U)

Checklist
  • make -j4 test (UNIX), or vcbuild test (Windows) passes
  • commit message follows commit guidelines

Merge request reports

Loading