From cd2459654e8bc00f9eb686054cf0124f5e65a54a Mon Sep 17 00:00:00 2001 From: Antoine du Hamel Date: Thu, 13 Apr 2023 17:27:32 +0200 Subject: [PATCH 1/2] benchmark: add a benchmark for `defaultResolve` --- benchmark/esm/esm-loader-defaultResolve.js | 51 ++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 benchmark/esm/esm-loader-defaultResolve.js diff --git a/benchmark/esm/esm-loader-defaultResolve.js b/benchmark/esm/esm-loader-defaultResolve.js new file mode 100644 index 00000000000000..3a54aa8ce0f320 --- /dev/null +++ b/benchmark/esm/esm-loader-defaultResolve.js @@ -0,0 +1,51 @@ +// Tests the impact on eager operations required for policies affecting +// general startup, does not test lazy operations +'use strict'; +const fs = require('node:fs'); +const path = require('node:path'); +const common = require('../common.js'); + +const tmpdir = require('../../test/common/tmpdir.js'); +const { pathToFileURL } = require('node:url'); + +const benchmarkDirectory = + path.resolve(tmpdir.path, 'benchmark-import-meta-resolve'); + +const parentURL = pathToFileURL(path.join(benchmarkDirectory, 'entry-point.js')); + +const configs = { + n: [1e3], + specifier: [ + './relative-existant.js', + './relative-inexistant.js', + 'prefixless-existant', + 'prefixless-inexistant', + 'node:prefixed-inexistant', + 'node:os', + ], +}; + +const options = { + flags: ['--expose-internals'], +}; + +const bench = common.createBenchmark(main, configs, options); + +function main(conf) { + const { defaultResolve } = require('internal/modules/esm/resolve'); + tmpdir.refresh(); + + fs.mkdirSync(path.join(benchmarkDirectory, 'node_modules', 'prefixless-existant'), { recursive: true }); + fs.writeFileSync(path.join(benchmarkDirectory, 'node_modules', 'prefixless-existant', 'index.js'), '\n'); + fs.writeFileSync(path.join(benchmarkDirectory, 'relative-existant.js'), '\n'); + + bench.start(); + + for (let i = 0; i < conf.n; i++) { + try { + defaultResolve(conf.specifier, { parentURL }); + } catch { /* empty */ } + } + + bench.end(conf.n); +} From 7899655e86f439d5c109e5fede29ddf20109add9 Mon Sep 17 00:00:00 2001 From: Antoine du Hamel Date: Thu, 13 Apr 2023 19:29:54 +0200 Subject: [PATCH 2/2] Apply suggestions from code review Co-authored-by: Mohammed Keyvanzadeh Co-authored-by: Geoffrey Booth --- benchmark/esm/esm-loader-defaultResolve.js | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/benchmark/esm/esm-loader-defaultResolve.js b/benchmark/esm/esm-loader-defaultResolve.js index 3a54aa8ce0f320..85409a122637d5 100644 --- a/benchmark/esm/esm-loader-defaultResolve.js +++ b/benchmark/esm/esm-loader-defaultResolve.js @@ -1,5 +1,5 @@ // Tests the impact on eager operations required for policies affecting -// general startup, does not test lazy operations +// general startup, does not test lazy operations 'use strict'; const fs = require('node:fs'); const path = require('node:path'); @@ -16,11 +16,11 @@ const parentURL = pathToFileURL(path.join(benchmarkDirectory, 'entry-point.js')) const configs = { n: [1e3], specifier: [ - './relative-existant.js', - './relative-inexistant.js', - 'prefixless-existant', - 'prefixless-inexistant', - 'node:prefixed-inexistant', + './relative-existing.js', + './relative-nonexistent.js', + 'unprefixed-existing', + 'unprefixed-nonexistent', + 'node:prefixed-nonexistent', 'node:os', ], }; @@ -35,9 +35,9 @@ function main(conf) { const { defaultResolve } = require('internal/modules/esm/resolve'); tmpdir.refresh(); - fs.mkdirSync(path.join(benchmarkDirectory, 'node_modules', 'prefixless-existant'), { recursive: true }); - fs.writeFileSync(path.join(benchmarkDirectory, 'node_modules', 'prefixless-existant', 'index.js'), '\n'); - fs.writeFileSync(path.join(benchmarkDirectory, 'relative-existant.js'), '\n'); + fs.mkdirSync(path.join(benchmarkDirectory, 'node_modules', 'unprefixed-existing'), { recursive: true }); + fs.writeFileSync(path.join(benchmarkDirectory, 'node_modules', 'unprefixed-existing', 'index.js'), '\n'); + fs.writeFileSync(path.join(benchmarkDirectory, 'relative-existing.js'), '\n'); bench.start();