Skip to content

Commit 90c660d

Browse files
joyeecheungtargos
authored andcommittedSep 21, 2024
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 d0e6f91 commit 90c660d

File tree

1 file changed

+79
-0
lines changed

1 file changed

+79
-0
lines changed
 

‎benchmark/esm/require-esm.js

+79
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
'use strict';
2+
3+
const common = require('../common');
4+
const fs = require('fs');
5+
const tmpdir = require('../../test/common/tmpdir');
6+
const path = require('path');
7+
const assert = require('assert');
8+
9+
const bench = 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+
function prepare(count, useDefault) {
18+
tmpdir.refresh();
19+
const dir = tmpdir.resolve('modules');
20+
fs.mkdirSync(dir, { recursive: true });
21+
let mainSource = '';
22+
let useSource = 'exports.access = function() { return 0';
23+
for (let i = 0; i < count; ++i) {
24+
let modSource = `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+
const filename = `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+
const script = tmpdir.resolve('main.js');
45+
fs.writeFileSync(script, mainSource + useSource, 'utf8');
46+
return script;
47+
}
48+
49+
function main({ n, exports, type }) {
50+
const script = prepare(n, exports === 'default');
51+
switch (type) {
52+
case 'all': {
53+
bench.start();
54+
const result = 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+
let result = access();
63+
for (let i = 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+
const result = access();
75+
assert.strictEqual(result, n);
76+
break;
77+
}
78+
}
79+
}

0 commit comments

Comments
 (0)
Please sign in to comment.