benchmark: add microbenchmarks for ES Map
PR-URL: https://github.com/nodejs/node/pull/7581 Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Franziska Hinkelmann <ranziska.hinkelmann@gmail.com>
This commit is contained in:
parent
2c6ca32e8b
commit
07cc9dfd05
96
benchmark/es/map-bench.js
Normal file
96
benchmark/es/map-bench.js
Normal file
@ -0,0 +1,96 @@
|
||||
'use strict';
|
||||
|
||||
const common = require('../common.js');
|
||||
const assert = require('assert');
|
||||
|
||||
const bench = common.createBenchmark(main, {
|
||||
method: ['object', 'nullProtoObject', 'fakeMap', 'map'],
|
||||
millions: [1]
|
||||
});
|
||||
|
||||
function runObject(n) {
|
||||
const m = {};
|
||||
var i = 0;
|
||||
bench.start();
|
||||
for (; i < n; i++) {
|
||||
m['i' + i] = i;
|
||||
m['s' + i] = String(i);
|
||||
assert.equal(m['i' + i], m['s' + i]);
|
||||
m['i' + i] = undefined;
|
||||
m['s' + i] = undefined;
|
||||
}
|
||||
bench.end(n / 1e6);
|
||||
}
|
||||
|
||||
function runNullProtoObject(n) {
|
||||
const m = Object.create(null);
|
||||
var i = 0;
|
||||
bench.start();
|
||||
for (; i < n; i++) {
|
||||
m['i' + i] = i;
|
||||
m['s' + i] = String(i);
|
||||
assert.equal(m['i' + i], m['s' + i]);
|
||||
m['i' + i] = undefined;
|
||||
m['s' + i] = undefined;
|
||||
}
|
||||
bench.end(n / 1e6);
|
||||
}
|
||||
|
||||
function fakeMap() {
|
||||
const m = {};
|
||||
return {
|
||||
get(key) { return m['$' + key]; },
|
||||
set(key, val) { m['$' + key] = val; },
|
||||
get size() { return Object.keys(m).length; },
|
||||
has(key) { return Object.prototype.hasOwnProperty.call(m, '$' + key); }
|
||||
};
|
||||
}
|
||||
|
||||
function runFakeMap(n) {
|
||||
const m = fakeMap();
|
||||
var i = 0;
|
||||
bench.start();
|
||||
for (; i < n; i++) {
|
||||
m.set('i' + i, i);
|
||||
m.set('s' + i, String(i));
|
||||
assert.equal(m.get('i' + i), m.get('s' + i));
|
||||
m.set('i' + i, undefined);
|
||||
m.set('s' + i, undefined);
|
||||
}
|
||||
bench.end(n / 1e6);
|
||||
}
|
||||
|
||||
function runMap(n) {
|
||||
const m = new Map();
|
||||
var i = 0;
|
||||
bench.start();
|
||||
for (; i < n; i++) {
|
||||
m.set('i' + i, i);
|
||||
m.set('s' + i, String(i));
|
||||
assert.equal(m.get('i' + i), m.get('s' + i));
|
||||
m.set('i' + i, undefined);
|
||||
m.set('s' + i, undefined);
|
||||
}
|
||||
bench.end(n / 1e6);
|
||||
}
|
||||
|
||||
function main(conf) {
|
||||
const n = +conf.millions * 1e6;
|
||||
|
||||
switch (conf.method) {
|
||||
case 'object':
|
||||
runObject(n);
|
||||
break;
|
||||
case 'nullProtoObject':
|
||||
runNullProtoObject(n);
|
||||
break;
|
||||
case 'fakeMap':
|
||||
runFakeMap(n);
|
||||
break;
|
||||
case 'map':
|
||||
runMap(n);
|
||||
break;
|
||||
default:
|
||||
throw new Error('Unexpected method');
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user