mirror of
https://github.com/vercel/next.js.git
synced 2026-09-20 02:25:18 +08:00
b3959cdcbf
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 ```
64 lines
1.2 KiB
Bash
Executable File
64 lines
1.2 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
ITERATIONS=5
|
|
|
|
show_help() {
|
|
echo "Usage: $(basename "$0") [-i|--iterations N] [-h|--help]"
|
|
exit "${1:-0}"
|
|
}
|
|
|
|
if ! OPTS=$(getopt -o i:h --long iterations:,help -n "$(basename "$0")" -- "$@"); then
|
|
show_help 1
|
|
fi
|
|
eval set -- "$OPTS"
|
|
|
|
while true; do
|
|
case "$1" in
|
|
-i|--iterations)
|
|
ITERATIONS="$2"
|
|
shift 2
|
|
;;
|
|
-h|--help)
|
|
show_help
|
|
;;
|
|
*)
|
|
break
|
|
;;
|
|
esac
|
|
done
|
|
|
|
cleanup() {
|
|
for i in $(seq 1 "$ITERATIONS"); do
|
|
rm -rf "fixtures-$i"
|
|
done
|
|
}
|
|
|
|
trap cleanup EXIT
|
|
cleanup
|
|
|
|
run_benchmark() {
|
|
local name=$1
|
|
local script=$2
|
|
shift 2
|
|
|
|
echo "-----------"
|
|
for i in $(seq 1 "$ITERATIONS"); do
|
|
local fixture="fixtures-$i"
|
|
mkdir "$fixture"
|
|
cd "fixtures-$i"
|
|
fuzzponent -d 2 -s 20
|
|
cd ..
|
|
echo "$name $i"
|
|
node "$script" "$fixture" "$@"
|
|
if [[ -d "$fixture" ]]; then rmdir "$fixture"; fi
|
|
done
|
|
}
|
|
|
|
run_benchmark "rimraf (async)" "rimraf.js" "async"
|
|
run_benchmark "rimraf (sync)" "rimraf.js" "sync"
|
|
run_benchmark "recursive delete" "recursive-delete.js"
|
|
run_benchmark "nodejs rm (promises)" "nodejs-rm.js" "promises"
|
|
run_benchmark "nodejs rm (callback)" "nodejs-rm.js" "callback"
|
|
run_benchmark "nodejs rm (sync)" "nodejs-rm.js" "sync"
|