Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
17 commits
Select commit Hold shift + click to select a range
197cabf
benchmark: add source map basic performance tests
miguelmarcondesf Apr 28, 2025
b41dced
benchmark: expand operations and add performance tests for minified, …
miguelmarcondesf Apr 28, 2025
8c017de
benchmark: add performance tests for findEntry and findOrigin operati…
miguelmarcondesf Apr 29, 2025
338bf91
benchmark: add initial performance benchmark for findSourceMap operation
miguelmarcondesf Apr 29, 2025
c50128d
benchmark: add performance tests for findSourceMap with invalid and m…
miguelmarcondesf Apr 29, 2025
a0bcf81
benchmark: add performance test for findSourceMap with generated source
miguelmarcondesf Apr 29, 2025
bda2344
benchmark: add performance benchmark for prepareStackTraceWithSourceMaps
miguelmarcondesf Apr 30, 2025
ea724fc
benchmark: refactor payload handling and avoid V8 deadcode elimination
miguelmarcondesf May 2, 2025
acae481
benchmark: refactor payload handling and avoid v8 deadcode eliminatio…
miguelmarcondesf May 3, 2025
dbceb0e
benchmark: refactor payload handling and avoid v8 deadcode eliminatio…
miguelmarcondesf May 3, 2025
7fe30ea
benchmark: increase iteration count for source map cache
miguelmarcondesf May 3, 2025
4ed4f78
test: add test of source map benchmark
miguelmarcondesf May 4, 2025
7d105d7
benchmark: moving construction from bench scope for find methods
miguelmarcondesf Jun 5, 2025
421ae12
benchmark: reduce iteration count and remove instance for find operat…
miguelmarcondesf Jun 5, 2025
bccecc2
benchmark: add valid map file to maybeCacheSourceMap
miguelmarcondesf Jun 5, 2025
d056eac
benchmark:fix module imports and remove large payload cases
miguelmarcondesf Jun 6, 2025
2d01a2b
benchmark: remove prepare-stack-trace to avoid testing internals
miguelmarcondesf Jun 9, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
73 changes: 73 additions & 0 deletions benchmark/source_map/source-map-cache.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
'use strict';

const common = require('../common.js');
const assert = require('assert');
const fs = require('fs');
const path = require('path');

const options = {
flags: ['--expose-internals'],
};

const bench = common.createBenchmark(
main,
{
operation: [
'findSourceMap-valid',
'findSourceMap-generated-source',
],
n: [1e5],
},
options,
);

function main({ operation, n }) {
const {
setSourceMapsSupport,
maybeCacheSourceMap,
} = require('internal/source_map/source_map_cache');
const { findSourceMap } = require('node:module');

setSourceMapsSupport(true);
const validFileName = path.resolve(
__dirname,
'../../test/fixtures/test-runner/source-maps/line-lengths/index.js',
);
const validMapFile = path.resolve(validFileName + '.map');
const validFileContent = fs.readFileSync(validFileName, 'utf8');
const fakeModule = { filename: validFileName };

let sourceMap;
switch (operation) {
case 'findSourceMap-valid':
maybeCacheSourceMap(validFileName, validFileContent, fakeModule, false, undefined, validMapFile);
bench.start();

for (let i = 0; i < n; i++) {
sourceMap = findSourceMap(validFileName);
}
bench.end(n);
break;

case 'findSourceMap-generated-source':
maybeCacheSourceMap(
validFileName,
validFileContent,
fakeModule,
true,
validFileName,
validMapFile,
);
bench.start();

for (let i = 0; i < n; i++) {
sourceMap = findSourceMap(validFileName);
}
bench.end(n);
break;

default:
throw new Error(`Unknown operation: ${operation}`);
}
assert.ok(sourceMap);
}
137 changes: 137 additions & 0 deletions benchmark/source_map/source-map.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,137 @@
'use strict';

const common = require('../common.js');
const assert = require('assert');
const fs = require('fs');
const path = require('path');

const options = {
flags: ['--expose-internals'],
};

const bench = common.createBenchmark(
main,
{
operation: [
'parse',
'parse-minified',
'parse-sectioned',
'findEntry',
'findEntry-minified',
'findEntry-sectioned',
'findOrigin',
'findOrigin-minified',
'findOrigin-sectioned',
],
n: [1e5],
},
options,
);

function main({ operation, n }) {
const { SourceMap } = require('node:module');

const samplePayload = JSON.parse(
fs.readFileSync(
path.resolve(__dirname, '../../test/fixtures/source-map/no-source.js.map'),
'utf8',
),
);
const minifiedPayload = JSON.parse(
fs.readFileSync(
path.resolve(__dirname, '../../test/fixtures/source-map/enclosing-call-site.js.map'),
'utf8',
),
);
const sectionedPayload = JSON.parse(
fs.readFileSync(
path.resolve(__dirname, '../../test/fixtures/source-map/disk-index.map'),
'utf8',
),
);

let sourceMap;
switch (operation) {
case 'parse':
bench.start();
for (let i = 0; i < n; i++) {
sourceMap = new SourceMap(samplePayload);
}
bench.end(n);
break;

case 'parse-minified':
bench.start();
for (let i = 0; i < n; i++) {
sourceMap = new SourceMap(minifiedPayload);
}
bench.end(n);
break;

case 'parse-sectioned':
bench.start();
for (let i = 0; i < n; i++) {
sourceMap = new SourceMap(sectionedPayload);
}
bench.end(n);
break;

case 'findEntry':
sourceMap = new SourceMap(samplePayload);
bench.start();
for (let i = 0; i < n; i++) {
sourceMap.findEntry(i, i);
}
bench.end(n);
break;

case 'findEntry-minified':
sourceMap = new SourceMap(minifiedPayload);
bench.start();
for (let i = 0; i < n; i++) {
sourceMap.findEntry(i, i);
}
bench.end(n);
break;

case 'findEntry-sectioned':
sourceMap = new SourceMap(sectionedPayload);
bench.start();
for (let i = 0; i < n; i++) {
sourceMap.findEntry(i, i);
}
bench.end(n);
break;

case 'findOrigin':
sourceMap = new SourceMap(samplePayload);
bench.start();
for (let i = 0; i < n; i++) {
sourceMap.findOrigin(i, i);
}
bench.end(n);
break;

case 'findOrigin-minified':
sourceMap = new SourceMap(minifiedPayload);
bench.start();
for (let i = 0; i < n; i++) {
sourceMap.findOrigin(i, i);
}
bench.end(n);
break;

case 'findOrigin-sectioned':
sourceMap = new SourceMap(sectionedPayload);
bench.start();
for (let i = 0; i < n; i++) {
sourceMap.findOrigin(i, i);
}
bench.end(n);
break;

default:
throw new Error(`Unknown operation: ${operation}`);
}
assert.ok(sourceMap);
}
7 changes: 7 additions & 0 deletions test/benchmark/test-benchmark-source-map.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
'use strict';

require('../common');

const runBenchmark = require('../common/benchmark');

runBenchmark('source_map', { NODEJS_BENCHMARK_ZERO_ALLOWED: 1 });
Loading