Skip to content

Commit fab8eb6

Browse files
rvaggevanlucas
authored andcommitted
benchmark: add microbenchmarks for ES Map
PR-URL: #7581 Reviewed-By: James M Snell <[email protected]> Reviewed-By: Franziska Hinkelmann <[email protected]>
1 parent bd9cb40 commit fab8eb6

File tree

1 file changed

+96
-0
lines changed

1 file changed

+96
-0
lines changed

‎benchmark/es/map-bench.js‎

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
'use strict';
2+
3+
constcommon=require('../common.js');
4+
constassert=require('assert');
5+
6+
constbench=common.createBenchmark(main,{
7+
method: ['object','nullProtoObject','fakeMap','map'],
8+
millions: [1]
9+
});
10+
11+
functionrunObject(n){
12+
constm={};
13+
vari=0;
14+
bench.start();
15+
for(;i<n;i++){
16+
m['i'+i]=i;
17+
m['s'+i]=String(i);
18+
assert.equal(m['i'+i],m['s'+i]);
19+
m['i'+i]=undefined;
20+
m['s'+i]=undefined;
21+
}
22+
bench.end(n/1e6);
23+
}
24+
25+
functionrunNullProtoObject(n){
26+
constm=Object.create(null);
27+
vari=0;
28+
bench.start();
29+
for(;i<n;i++){
30+
m['i'+i]=i;
31+
m['s'+i]=String(i);
32+
assert.equal(m['i'+i],m['s'+i]);
33+
m['i'+i]=undefined;
34+
m['s'+i]=undefined;
35+
}
36+
bench.end(n/1e6);
37+
}
38+
39+
functionfakeMap(){
40+
constm={};
41+
return{
42+
get(key){returnm['$'+key];},
43+
set(key,val){m['$'+key]=val;},
44+
getsize(){returnObject.keys(m).length;},
45+
has(key){returnObject.prototype.hasOwnProperty.call(m,'$'+key);}
46+
};
47+
}
48+
49+
functionrunFakeMap(n){
50+
constm=fakeMap();
51+
vari=0;
52+
bench.start();
53+
for(;i<n;i++){
54+
m.set('i'+i,i);
55+
m.set('s'+i,String(i));
56+
assert.equal(m.get('i'+i),m.get('s'+i));
57+
m.set('i'+i,undefined);
58+
m.set('s'+i,undefined);
59+
}
60+
bench.end(n/1e6);
61+
}
62+
63+
functionrunMap(n){
64+
constm=newMap();
65+
vari=0;
66+
bench.start();
67+
for(;i<n;i++){
68+
m.set('i'+i,i);
69+
m.set('s'+i,String(i));
70+
assert.equal(m.get('i'+i),m.get('s'+i));
71+
m.set('i'+i,undefined);
72+
m.set('s'+i,undefined);
73+
}
74+
bench.end(n/1e6);
75+
}
76+
77+
functionmain(conf){
78+
constn=+conf.millions*1e6;
79+
80+
switch(conf.method){
81+
case'object':
82+
runObject(n);
83+
break;
84+
case'nullProtoObject':
85+
runNullProtoObject(n);
86+
break;
87+
case'fakeMap':
88+
runFakeMap(n);
89+
break;
90+
case'map':
91+
runMap(n);
92+
break;
93+
default:
94+
thrownewError('Unexpected method');
95+
}
96+
}

0 commit comments

Comments
(0)