summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichaël Zasso <targos@protonmail.com>2017-01-21 20:01:12 +0100
committerMichaël Zasso <targos@protonmail.com>2017-01-27 13:00:42 +0100
commitad6e778c4a903a7d484125c4737ad4816331e457 (patch)
treebde36690d7db6c67e3a1d3b3127bad26576004cb
parent084acc819db956cc7fd83c90c55188092d3d5b41 (diff)
downloadandroid-node-v8-ad6e778c4a903a7d484125c4737ad4816331e457.tar.gz
android-node-v8-ad6e778c4a903a7d484125c4737ad4816331e457.tar.bz2
android-node-v8-ad6e778c4a903a7d484125c4737ad4816331e457.zip
benchmark: add benchmark for object properties
Adds a benchmark to compare the speed of property setting/getting in four cases: - Dot notation: `obj.prop = value` - Bracket notation with string: `obj['prop'] = value` - Bracket notation with string variable: `obj[prop] = value` - Bracket notation with Symbol variable: `obj[sym] = value` PR-URL: https://github.com/nodejs/node/pull/10949 Reviewed-By: Luigi Pinca <luigipinca@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
-rw-r--r--benchmark/misc/object-property-bench.js81
1 files changed, 81 insertions, 0 deletions
diff --git a/benchmark/misc/object-property-bench.js b/benchmark/misc/object-property-bench.js
new file mode 100644
index 0000000000..8ac7683cd5
--- /dev/null
+++ b/benchmark/misc/object-property-bench.js
@@ -0,0 +1,81 @@
+'use strict';
+
+const common = require('../common.js');
+
+const bench = common.createBenchmark(main, {
+ method: ['property', 'string', 'variable', 'symbol'],
+ millions: [1000]
+});
+
+function runProperty(n) {
+ const object = {};
+ var i = 0;
+ bench.start();
+ for (; i < n; i++) {
+ object.p1 = 21;
+ object.p2 = 21;
+ object.p1 += object.p2;
+ }
+ bench.end(n / 1e6);
+}
+
+function runString(n) {
+ const object = {};
+ var i = 0;
+ bench.start();
+ for (; i < n; i++) {
+ object['p1'] = 21;
+ object['p2'] = 21;
+ object['p1'] += object['p2'];
+ }
+ bench.end(n / 1e6);
+}
+
+function runVariable(n) {
+ const object = {};
+ const var1 = 'p1';
+ const var2 = 'p2';
+ var i = 0;
+ bench.start();
+ for (; i < n; i++) {
+ object[var1] = 21;
+ object[var2] = 21;
+ object[var1] += object[var2];
+ }
+ bench.end(n / 1e6);
+}
+
+function runSymbol(n) {
+ const object = {};
+ const symbol1 = Symbol('p1');
+ const symbol2 = Symbol('p2');
+ var i = 0;
+ bench.start();
+ for (; i < n; i++) {
+ object[symbol1] = 21;
+ object[symbol2] = 21;
+ object[symbol1] += object[symbol2];
+ }
+ bench.end(n / 1e6);
+}
+
+function main(conf) {
+ const n = +conf.millions * 1e6;
+
+ switch (conf.method) {
+ case 'property':
+ runProperty(n);
+ break;
+ case 'string':
+ runString(n);
+ break;
+ case 'variable':
+ runVariable(n);
+ break;
+ case 'symbol':
+ runSymbol(n);
+ break;
+ default:
+ throw new Error('Unexpected method');
+ }
+}