From 229e283d9b3d13362374eeffd596acc398ea92f1 Mon Sep 17 00:00:00 2001 From: Antoine du Hamel Date: Fri, 25 Apr 2025 17:24:11 +0200 Subject: [PATCH] benchmark: disambiguate `filename` and `dirname` read perf --- benchmark/esm/import-meta.js | 23 +++++++++++-------- ...s => import-meta-dirname-and-filename.mjs} | 0 benchmark/fixtures/import-meta-dirname.mjs | 1 + benchmark/fixtures/import-meta-filename.mjs | 1 + 4 files changed, 16 insertions(+), 9 deletions(-) rename benchmark/fixtures/{esm-dir-file.mjs => import-meta-dirname-and-filename.mjs} (100%) create mode 100644 benchmark/fixtures/import-meta-dirname.mjs create mode 100644 benchmark/fixtures/import-meta-filename.mjs diff --git a/benchmark/esm/import-meta.js b/benchmark/esm/import-meta.js index fd371cf60ed6a3..0e56d8a34a353d 100644 --- a/benchmark/esm/import-meta.js +++ b/benchmark/esm/import-meta.js @@ -1,32 +1,37 @@ 'use strict'; const path = require('path'); -const { pathToFileURL, fileURLToPath } = require('url'); +const { pathToFileURL } = require('url'); const common = require('../common'); const assert = require('assert'); const bench = common.createBenchmark(main, { n: [1000], + valuesToRead: [ + 'dirname-and-filename', + 'dirname', + 'filename', + ], }); -const file = pathToFileURL( - path.resolve(__filename, '../../fixtures/esm-dir-file.mjs'), -); -async function load(array, n) { +const fixtureDir = path.resolve(__filename, '../../fixtures'); +const fixtureDirURL = pathToFileURL(fixtureDir); +async function load(array, n, valuesToRead) { for (let i = 0; i < n; i++) { - array[i] = await import(`${file}?i=${i}`); + array[i] = await import(`${fixtureDirURL}/import-meta-${valuesToRead}.mjs?i=${i}`); } return array; } -function main({ n }) { +function main({ n, valuesToRead }) { const array = []; for (let i = 0; i < n; ++i) { array.push({ dirname: '', filename: '', i: 0 }); } bench.start(); - load(array, n).then((arr) => { + load(array, n, valuesToRead).then((arr) => { bench.end(n); - assert.strictEqual(arr[n - 1].filename, fileURLToPath(file)); + if (valuesToRead.includes('dirname')) assert.strictEqual(arr[n - 1].dirname, fixtureDir); + if (valuesToRead.includes('filename')) assert.strictEqual(arr[n - 1].filename, path.join(fixtureDir, `import-meta-${valuesToRead}.mjs`)); }); } diff --git a/benchmark/fixtures/esm-dir-file.mjs b/benchmark/fixtures/import-meta-dirname-and-filename.mjs similarity index 100% rename from benchmark/fixtures/esm-dir-file.mjs rename to benchmark/fixtures/import-meta-dirname-and-filename.mjs diff --git a/benchmark/fixtures/import-meta-dirname.mjs b/benchmark/fixtures/import-meta-dirname.mjs new file mode 100644 index 00000000000000..8429b1f3cf84ae --- /dev/null +++ b/benchmark/fixtures/import-meta-dirname.mjs @@ -0,0 +1 @@ +export const dirname = import.meta.dirname; diff --git a/benchmark/fixtures/import-meta-filename.mjs b/benchmark/fixtures/import-meta-filename.mjs new file mode 100644 index 00000000000000..73e495e19b76ab --- /dev/null +++ b/benchmark/fixtures/import-meta-filename.mjs @@ -0,0 +1 @@ +export const filename = import.meta.filename;