Skip to content

Commit 90c660d

Browse files
joyeecheungtargos
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 d0e6f91 commit 90c660d

File tree

1 file changed

+79
-0
lines changed

1 file changed

+79
-0
lines changed

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+
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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy