benchmark/README.md
Run in the root directory, not ./benchmark
docker build --rm -f Dockerfile.benchmark . --progress plaincargo install hyperfinepnpm inode bench.js formatternode bench.js linterSetup: MacBook Pro (13-inch, M1, 2020)
xargs -P1dprintThe speed-ups for the multithreaded benchmarks can vary significantly depending on the setup. For example, Biome is 100 times faster than Prettier on an M1 Max with 10 cores.
Biome's ~15x times faster than ESLint (without any plugins)
Biome single-threaded is ~4 times faster than ESLint.
Biome's linter is fast, but there is room for improvements
Biome's linter spends significant time building the semantic model, the control flow graph, and matching queries. I'm convinced there's room for improvement (3565, 3569).
Computing the diff for code fixes is expensive. Biome can spend up to 3s computing diffs (not measured by these benchmarks, see explanations below)
We've been careful to create fair benchmarks. This section explains some of the decisions behind the benchmark setup and how these decisions affect the results. Please let us know if you have ideas on how to make the benchmarks fairer or if there's a mistake with our setup.
--log-level=error for a fairer benchmark so that Prettier doesn't print every filename.--max-diagnostics=0 when running Biome because Biome then only counts diagnostics without generating the diffs. Overall, this results in a more accurate comparison but has the downside that Biome only prints the diagnostic count, whereas ESLint prints a line for each lint error.Run time find lib/ examples declarations benchmark -name '*.js' -print0 | xargs -P8 -0 -n 200 npx prettier --write --loglevel=error in the target/webpack directory. I manually tinkered with the -n parameter to get the fastest run. ↩