summaryrefslogtreecommitdiff
path: root/benchmark/es
diff options
context:
space:
mode:
authorJames M Snell <jasnell@gmail.com>2018-01-29 13:58:45 -0800
committerJames M Snell <jasnell@gmail.com>2018-02-01 07:35:54 -0800
commit84cc8329f71dc8d468923a98dcf6906583b568e4 (patch)
treee6bd954f83fd1a260afab9708b30f56e46f13c43 /benchmark/es
parent9e1a6f8cb1e8b9cd596c42542a9ce6ded3734b1b (diff)
downloadandroid-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.js46
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');
+ }
+}