Skip to content

Commit ac7a40e

Browse files
benchmark: add source map and source map cache
1 parent f2e99c5 commit ac7a40e

File tree

3 files changed

+170
-0
lines changed

3 files changed

+170
-0
lines changed
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
'use strict';
2+
3+
const common = require('../common.js');
4+
const assert = require('assert');
5+
const path = require('path');
6+
const fs = require('fs');
7+
8+
const bench = common.createBenchmark(
9+
main,
10+
{
11+
operation: [
12+
'findSourceMap-valid',
13+
'findSourceMap-generated-source',
14+
],
15+
n: [1e5],
16+
},
17+
);
18+
19+
function main({ operation, n }) {
20+
const Module = require('node:module');
21+
22+
Module.setSourceMapsSupport(true, {
23+
generatedCode: true,
24+
});
25+
const validFileName = path.resolve(
26+
__dirname,
27+
'../../test/fixtures/test-runner/source-maps/line-lengths/index.js',
28+
);
29+
30+
const generatedFileName = path.resolve(
31+
__dirname,
32+
'../../test/fixtures/source-map/disk.js',
33+
);
34+
const generatedFileContent = fs.readFileSync(generatedFileName, 'utf8');
35+
const sourceMapUrl = path.basename(generatedFileName, '.js') + '.map';
36+
const sourceWithGeneratedSourceMap =
37+
`${generatedFileContent}\n//# sourceMappingURL=${sourceMapUrl}\n//# sourceURL=${generatedFileName}`;
38+
const generatedExpectedUrl = `file://${path.resolve(generatedFileName)}`;
39+
40+
let sourceMap;
41+
switch (operation) {
42+
case 'findSourceMap-valid':
43+
require(validFileName);
44+
45+
bench.start();
46+
for (let i = 0; i < n; i++) {
47+
sourceMap = Module.findSourceMap(validFileName);
48+
}
49+
bench.end(n);
50+
break;
51+
52+
case 'findSourceMap-generated-source':
53+
eval(sourceWithGeneratedSourceMap);
54+
55+
bench.start();
56+
for (let i = 0; i < n; i++) {
57+
sourceMap = Module.findSourceMap(generatedExpectedUrl);
58+
}
59+
bench.end(n);
60+
break;
61+
62+
default:
63+
throw new Error(`Unknown operation: ${operation}`);
64+
}
65+
assert.ok(sourceMap);
66+
}

benchmark/source_map/source-map.js

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
'use strict';
2+
3+
const common = require('../common.js');
4+
const assert = require('assert');
5+
const fs = require('fs');
6+
const path = require('path');
7+
8+
const bench = common.createBenchmark(
9+
main,
10+
{
11+
operation: [
12+
'parse',
13+
'parse-sectioned',
14+
'findEntry',
15+
'findEntry-sectioned',
16+
'findOrigin',
17+
'findOrigin-sectioned',
18+
],
19+
n: [1e5],
20+
},
21+
);
22+
23+
function main({ operation, n }) {
24+
const { SourceMap } = require('node:module');
25+
26+
const samplePayload = JSON.parse(
27+
fs.readFileSync(
28+
path.resolve(__dirname, '../../test/fixtures/source-map/no-source.js.map'),
29+
'utf8',
30+
),
31+
);
32+
const sectionedPayload = JSON.parse(
33+
fs.readFileSync(
34+
path.resolve(__dirname, '../../test/fixtures/source-map/disk-index.map'),
35+
'utf8',
36+
),
37+
);
38+
39+
let sourceMap;
40+
switch (operation) {
41+
case 'parse':
42+
bench.start();
43+
for (let i = 0; i < n; i++) {
44+
sourceMap = new SourceMap(samplePayload);
45+
}
46+
bench.end(n);
47+
break;
48+
49+
case 'parse-sectioned':
50+
bench.start();
51+
for (let i = 0; i < n; i++) {
52+
sourceMap = new SourceMap(sectionedPayload);
53+
}
54+
bench.end(n);
55+
break;
56+
57+
case 'findEntry':
58+
sourceMap = new SourceMap(samplePayload);
59+
bench.start();
60+
for (let i = 0; i < n; i++) {
61+
sourceMap.findEntry(i, i);
62+
}
63+
bench.end(n);
64+
break;
65+
66+
case 'findEntry-sectioned':
67+
sourceMap = new SourceMap(sectionedPayload);
68+
bench.start();
69+
for (let i = 0; i < n; i++) {
70+
sourceMap.findEntry(i, i);
71+
}
72+
bench.end(n);
73+
break;
74+
75+
case 'findOrigin':
76+
sourceMap = new SourceMap(samplePayload);
77+
bench.start();
78+
for (let i = 0; i < n; i++) {
79+
sourceMap.findOrigin(i, i);
80+
}
81+
bench.end(n);
82+
break;
83+
84+
case 'findOrigin-sectioned':
85+
sourceMap = new SourceMap(sectionedPayload);
86+
bench.start();
87+
for (let i = 0; i < n; i++) {
88+
sourceMap.findOrigin(i, i);
89+
}
90+
bench.end(n);
91+
break;
92+
93+
default:
94+
throw new Error(`Unknown operation: ${operation}`);
95+
}
96+
assert.ok(sourceMap);
97+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
'use strict';
2+
3+
require('../common');
4+
5+
const runBenchmark = require('../common/benchmark');
6+
7+
runBenchmark('source_map', { NODEJS_BENCHMARK_ZERO_ALLOWED: 1 });

0 commit comments

Comments
 (0)