mirror of
https://github.com/nodejs/node.git
synced 2025-12-28 07:50:41 +00:00
benchmark: add misc/startup-cli-version benchmark
This benchmarks the startup of various CLI tools that are already checked into the source code. We use --version because the output tends to be minimal and fewer operations are done to generate these so that the startup cost is still dominated by a more indispensible part of the CLI. PR-URL: https://github.com/nodejs/node/pull/50684 Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com> Reviewed-By: James M Snell <jasnell@gmail.com>
This commit is contained in:
parent
2d1bc3d130
commit
59b27d6990
51
benchmark/misc/startup-cli-version.js
Normal file
51
benchmark/misc/startup-cli-version.js
Normal file
@ -0,0 +1,51 @@
|
||||
'use strict';
|
||||
const common = require('../common.js');
|
||||
const { spawnSync } = require('child_process');
|
||||
const path = require('path');
|
||||
|
||||
// This benchmarks the startup of various CLI tools that are already
|
||||
// checked into the source code. We use --version because the output
|
||||
// tends to be minimal and fewer operations are done to generate
|
||||
// these so that the startup cost is still dominated by a more
|
||||
// indispensible part of the CLI.
|
||||
const bench = common.createBenchmark(main, {
|
||||
cli: [
|
||||
'tools/node_modules/eslint/bin/eslint.js',
|
||||
'deps/npm/bin/npm-cli.js',
|
||||
'deps/corepack/dist/corepack.js',
|
||||
],
|
||||
count: [30],
|
||||
});
|
||||
|
||||
function spawnProcess(cli, bench, state) {
|
||||
const cmd = process.execPath || process.argv[0];
|
||||
while (state.finished < state.count) {
|
||||
const child = spawnSync(cmd, [cli, '--version'], {
|
||||
env: { npm_config_loglevel: 'silent', ...process.env },
|
||||
});
|
||||
// Log some information for debugging if it fails, which it shouldn't.
|
||||
if (child.status !== 0) {
|
||||
console.log('---- STDOUT ----');
|
||||
console.log(child.stdout.toString());
|
||||
console.log('---- STDERR ----');
|
||||
console.log(child.stderr.toString());
|
||||
throw new Error(`Child process stopped with exit code ${child.status}`);
|
||||
}
|
||||
state.finished++;
|
||||
if (state.finished === 0) {
|
||||
// Finished warmup.
|
||||
bench.start();
|
||||
}
|
||||
|
||||
if (state.finished === state.count) {
|
||||
bench.end(state.count);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function main({ count, cli }) {
|
||||
cli = path.resolve(__dirname, '../../', cli);
|
||||
const warmup = 3;
|
||||
const state = { count, finished: -warmup };
|
||||
spawnProcess(cli, bench, state);
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user