From 65c461920936155b1ff99307971377cd4fe5872b Mon Sep 17 00:00:00 2001 From: LiviaMedeiros Date: Thu, 22 May 2025 17:29:44 +0800 Subject: [PATCH 1/3] benchmark: add callback-based `fs.glob` to glob benchmark --- benchmark/fs/bench-glob.js | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/benchmark/fs/bench-glob.js b/benchmark/fs/bench-glob.js index 02ecf929269054..c130cbccf1180d 100644 --- a/benchmark/fs/bench-glob.js +++ b/benchmark/fs/bench-glob.js @@ -11,7 +11,7 @@ const configs = { n: [1e3], dir: ['lib'], pattern: ['**/*', '*.js', '**/**.js'], - mode: ['async', 'sync'], + mode: ['sync', 'promise', 'callback'], recursive: ['true', 'false'], }; @@ -25,10 +25,26 @@ async function main(config) { bench.start(); for (let i = 0; i < config.n; i++) { - if (mode === 'async') { - noDead = await fs.promises.glob(pattern, { cwd: fullPath, recursive }); - } else { - noDead = fs.globSync(pattern, { cwd: fullPath, recursive }); + switch (mode) { + case 'sync': + noDead = fs.globSync(pattern, { cwd: fullPath, recursive }); + break; + case 'promise': + noDead = await fs.promises.glob(pattern, { cwd: fullPath, recursive }); + break; + case 'callback': + noDead = await new Promise((resolve, reject) => { + fs.glob(pattern, { cwd: fullPath, recursive }, (err, matches) => { + if (err) { + reject(err); + } else { + resolve(matches); + } + }); + }); + break; + default: + throw new Error(`Unknown mode: ${mode}`); } } From 531d6be411c8f79d247d3c6ecd2aa9ae718fb582 Mon Sep 17 00:00:00 2001 From: LiviaMedeiros Date: Fri, 23 May 2025 01:52:50 +0800 Subject: [PATCH 2/3] squash: optimize benchmark --- benchmark/fs/bench-glob.js | 30 ++++++++++++++++++------------ 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/benchmark/fs/bench-glob.js b/benchmark/fs/bench-glob.js index c130cbccf1180d..c6a7b57310149f 100644 --- a/benchmark/fs/bench-glob.js +++ b/benchmark/fs/bench-glob.js @@ -1,7 +1,11 @@ 'use strict'; const common = require('../common'); -const fs = require('fs'); +const { + glob, + globSync, + promises: { glob: globAsync }, +} = require('fs'); const path = require('path'); const assert = require('node:assert'); @@ -20,6 +24,16 @@ const bench = common.createBenchmark(main, configs); async function main(config) { const fullPath = path.resolve(benchmarkDirectory, config.dir); const { pattern, recursive, mode } = config; + const options = { cwd: fullPath, recursive }; + const callback = (resolve, reject) => { + glob(pattern, options, (err, matches) => { + if (err) { + reject(err) + } else { + resolve(matches); + } + }); + } let noDead; bench.start(); @@ -27,21 +41,13 @@ async function main(config) { for (let i = 0; i < config.n; i++) { switch (mode) { case 'sync': - noDead = fs.globSync(pattern, { cwd: fullPath, recursive }); + noDead = globSync(pattern, options); break; case 'promise': - noDead = await fs.promises.glob(pattern, { cwd: fullPath, recursive }); + noDead = await globAsync(pattern, options); break; case 'callback': - noDead = await new Promise((resolve, reject) => { - fs.glob(pattern, { cwd: fullPath, recursive }, (err, matches) => { - if (err) { - reject(err); - } else { - resolve(matches); - } - }); - }); + noDead = await new Promise(callback); break; default: throw new Error(`Unknown mode: ${mode}`); From 959390764419dd8a845c498fdfaf273b234e7730 Mon Sep 17 00:00:00 2001 From: LiviaMedeiros Date: Fri, 23 May 2025 03:44:14 +0800 Subject: [PATCH 3/3] squash: lint --- benchmark/fs/bench-glob.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/benchmark/fs/bench-glob.js b/benchmark/fs/bench-glob.js index c6a7b57310149f..74612701e2182a 100644 --- a/benchmark/fs/bench-glob.js +++ b/benchmark/fs/bench-glob.js @@ -28,12 +28,12 @@ async function main(config) { const callback = (resolve, reject) => { glob(pattern, options, (err, matches) => { if (err) { - reject(err) + reject(err); } else { resolve(matches); } }); - } + }; let noDead; bench.start();