mirror of https://github.com/lukechilds/node.git
Browse Source
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>v4.x
Rod Vagg
9 years ago
committed by
Myles Borins
1 changed files with 96 additions and 0 deletions
@ -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…
Reference in new issue