Add empty object helper implementations benchmark
authorJérôme Benoit <jerome.benoit@sap.com>
Tue, 25 Oct 2022 10:02:20 +0000 (12:02 +0200)
committerJérôme Benoit <jerome.benoit@sap.com>
Tue, 25 Oct 2022 10:02:20 +0000 (12:02 +0200)
Signed-off-by: Jérôme Benoit <jerome.benoit@sap.com>
empty-object.js [new file with mode: 0644]
package.json

diff --git a/empty-object.js b/empty-object.js
new file mode 100644 (file)
index 0000000..17be7fe
--- /dev/null
@@ -0,0 +1,38 @@
+const Benchmark = require('benny')
+
+const emptyLiteral = {}
+
+Benchmark.suite(
+  'Empty object',
+  Benchmark.add('Reflect keys', (obj = emptyLiteral) => {
+    return Reflect.ownKeys(obj).length === 0 && obj.constructor === Object
+  }),
+  Benchmark.add('Keys iteration ', (obj = emptyLiteral) => {
+    if (obj.constructor !== Object) return false
+    // Iterates over the keys of an object, if
+    // any exist, return false.
+    // eslint-disable-next-line no-unreachable-loop
+    for (const _ in obj) return false
+    return true
+  }),
+  Benchmark.add('Object keys', (obj = emptyLiteral) => {
+    return obj.constructor === Object && !Object.keys(obj).length
+  }),
+  Benchmark.cycle(),
+  Benchmark.complete(),
+  Benchmark.save({
+    file: 'empty-object',
+    format: 'json',
+    details: true
+  }),
+  Benchmark.save({
+    file: 'empty-object',
+    format: 'chart.html',
+    details: true
+  }),
+  Benchmark.save({
+    file: 'empty-object',
+    format: 'table.html',
+    details: true
+  })
+)
index f402a27672ce5386a0549eb16403ef39b13ec9f5..74f6bcda3382fc779189efb514af7a8275dc8c75 100644 (file)
@@ -10,6 +10,7 @@
     "prepare": "node prepare.js",
     "benchmark:busy-wait": "node busy-wait.js",
     "benchmark:empty-array": "node empty-array.js",
+    "benchmark:empty-object": "node empty-object.js",
     "benchmark:quick-select": "node quick-select.js",
     "benchmark:max": "node max.js",
     "benchmark:promise-handling": "node promise-handling.js",