Skip to content

Commit eb4e370

Browse files
joyeecheungaduh95
authored andcommitted
benchmark: add require-esm benchmark
PR-URL: #52166 Refs: #52134 Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Filip Skokan <panva.ip@gmail.com> Reviewed-By: Chengzhong Wu <legendecas@gmail.com> Reviewed-By: Guy Bedford <guybedford@gmail.com> Reviewed-By: Geoffrey Booth <webadmin@geoffreybooth.com>
1 parent 628a539 commit eb4e370

1 file changed

Lines changed: 79 additions & 0 deletions

File tree

‎benchmark/esm/require-esm.js‎

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
'use strict';
2+
3+
constcommon=require('../common');
4+
constfs=require('fs');
5+
consttmpdir=require('../../test/common/tmpdir');
6+
constpath=require('path');
7+
constassert=require('assert');
8+
9+
constbench=common.createBenchmark(main,{
10+
type: ['all','access','load'],
11+
exports: ['default','named'],
12+
n: [1000],
13+
},{
14+
flags: ['--experimental-require-module','--no-warnings'],
15+
});
16+
17+
functionprepare(count,useDefault){
18+
tmpdir.refresh();
19+
constdir=tmpdir.resolve('modules');
20+
fs.mkdirSync(dir,{recursive: true});
21+
letmainSource='';
22+
letuseSource='exports.access = function() { return 0';
23+
for(leti=0;i<count;++i){
24+
letmodSource=`const value${i} = 1;\n`;
25+
if(useDefault){
26+
modSource+=`export default { value${i} }\n`;
27+
}else{
28+
modSource+=`export { value${i} };\n`;
29+
}
30+
constfilename=`mod${i}.mjs`;
31+
fs.writeFileSync(
32+
path.resolve(dir,filename),
33+
modSource,
34+
'utf8',
35+
);
36+
mainSource+=`const mod${i} = require('./modules/${filename}');\n`;
37+
if(useDefault){
38+
useSource+=` + mod${i}.default.value${i}`;
39+
}else{
40+
useSource+=` + mod${i}.value${i}`;
41+
}
42+
}
43+
useSource+='; };\n';
44+
constscript=tmpdir.resolve('main.js');
45+
fs.writeFileSync(script,mainSource+useSource,'utf8');
46+
returnscript;
47+
}
48+
49+
functionmain({ n, exports, type }){
50+
constscript=prepare(n,exports==='default');
51+
switch(type){
52+
case'all': {
53+
bench.start();
54+
constresult=require(script).access();
55+
bench.end(n);
56+
assert.strictEqual(result,n);
57+
break;
58+
}
59+
case'access': {
60+
const{ access }=require(script);
61+
bench.start();
62+
letresult=access();
63+
for(leti=0;i<99;++i){
64+
result=access();
65+
}
66+
bench.end(n*100);
67+
assert.strictEqual(result,n);
68+
break;
69+
}
70+
case'load': {
71+
bench.start();
72+
const{ access }=require(script);
73+
bench.end(n);
74+
constresult=access();
75+
assert.strictEqual(result,n);
76+
break;
77+
}
78+
}
79+
}

0 commit comments

Comments
 (0)