diff options
author | James M Snell <jasnell@gmail.com> | 2018-01-29 13:58:45 -0800 |
---|---|---|
committer | James M Snell <jasnell@gmail.com> | 2018-02-01 07:35:54 -0800 |
commit | 84cc8329f71dc8d468923a98dcf6906583b568e4 (patch) | |
tree | e6bd954f83fd1a260afab9708b30f56e46f13c43 /benchmark/es | |
parent | 9e1a6f8cb1e8b9cd596c42542a9ce6ded3734b1b (diff) | |
download | android-node-v8-84cc8329f71dc8d468923a98dcf6906583b568e4.tar.gz android-node-v8-84cc8329f71dc8d468923a98dcf6906583b568e4.tar.bz2 android-node-v8-84cc8329f71dc8d468923a98dcf6906583b568e4.zip |
benchmark: spread operator benchmark
Benchmark comparing `util._extend()`, `Object.assign()`,
and the spread operator for object assignment.
`util._extend()` still wins currently.
PR-URL: https://github.com/nodejs/node/pull/18442
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Weijia Wang <starkwang@126.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
Reviewed-By: Yuta Hiroto <hello@about-hiroppy.com>
Diffstat (limited to 'benchmark/es')
-rw-r--r-- | benchmark/es/spread-assign.js | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/benchmark/es/spread-assign.js b/benchmark/es/spread-assign.js new file mode 100644 index 0000000000..00c634ff87 --- /dev/null +++ b/benchmark/es/spread-assign.js @@ -0,0 +1,46 @@ +'use strict'; + +const common = require('../common.js'); +const util = require('util'); + +const bench = common.createBenchmark(main, { + method: ['spread', 'assign', '_extend'], + count: [5, 10, 20], + millions: [1] +}); + +function main({ millions, context, count, rest, method }) { + const n = millions * 1e6; + + const src = {}; + for (let n = 0; n < count; n++) + src[`p${n}`] = n; + + let obj; // eslint-disable-line + let i; + + switch (method) { + case '': + // Empty string falls through to next line as default, mostly for tests. + case '_extend': + bench.start(); + for (i = 0; i < n; i++) + obj = util._extend({}, src); + bench.end(n); + break; + case 'assign': + bench.start(); + for (i = 0; i < n; i++) + obj = Object.assign({}, src); + bench.end(n); + break; + case 'spread': + bench.start(); + for (i = 0; i < n; i++) + obj = { ...src }; + bench.end(n); + break; + default: + throw new Error('Unexpected method'); + } +} |