Files
vercel__next.js/bench/recursive-delete/nodejs-rm.js
Benjamin Woodruff b3959cdcbf test: Fix and update recursive-delete benchmarks (#84875)
PR created with claude code, with some manual review.

- Update benchmark scripts to work, given my recent code changes
- Include a native nodejs benchmark
- Use rimraf's `manual` implementation (tries to use node's native version)
- Tried to clean up the code a bit
- Use a trap to always clean up
- Use getopt and add an `--iterations` option
- `set -euo pipefail` to avoid swallowing errors

Example output:

```
pnpm bench

> bench-recursive-delete@ bench /home/bgw.linux/next.js/bench/recursive-delete
> bash run.sh

-----------
rimraf (async) 1
62.443657
rimraf (async) 2
52.953482
rimraf (async) 3
52.029235
rimraf (async) 4
50.709822
rimraf (async) 5
54.204893
-----------
rimraf (sync) 1
35.034669
rimraf (sync) 2
35.663417
rimraf (sync) 3
46.360754
rimraf (sync) 4
36.859329
rimraf (sync) 5
34.368796
-----------
recursive delete 1
37.851534
recursive delete 2
35.98904
recursive delete 3
36.620913
recursive delete 4
38.059992
recursive delete 5
43.880346
-----------
nodejs rm (promises) 1
71.301125
nodejs rm (promises) 2
89.78331
nodejs rm (promises) 3
68.073553
nodejs rm (promises) 4
70.787543
nodejs rm (promises) 5
73.727616
-----------
nodejs rm (callback) 1
92.698258
nodejs rm (callback) 2
73.043993
nodejs rm (callback) 3
70.869584
nodejs rm (callback) 4
69.196757
nodejs rm (callback) 5
75.715526
-----------
nodejs rm (sync) 1
41.71002
nodejs rm (sync) 2
41.742395
nodejs rm (sync) 3
38.894571
nodejs rm (sync) 4
41.326271
nodejs rm (sync) 5
48.152122
```
2025-10-20 17:52:34 -07:00

28 lines
806 B
JavaScript

import { rm as rmPromises } from 'fs/promises'
import { rm as rmCallback, rmSync } from 'fs'
import { promisify } from 'util'
const rmCallbackPromise = promisify(rmCallback)
const targetDir = process.argv[2]
const method = process.argv[3] // 'promises', 'callback', or 'sync'
async function test() {
const time = process.hrtime()
if (method === 'promises') {
await rmPromises(targetDir, { recursive: true, force: true })
} else if (method === 'callback') {
await rmCallbackPromise(targetDir, { recursive: true, force: true })
} else if (method === 'sync') {
rmSync(targetDir, { recursive: true, force: true })
}
const hrtime = process.hrtime(time)
const nanoseconds = hrtime[0] * 1e9 + hrtime[1]
const milliseconds = nanoseconds / 1e6
console.log(milliseconds)
}
test()