Various performance baselines for typescript-eslint.
You'll need hyperfine installed locally, such as with brew install hyperfine
or winget install hyperfine
.
See sharkdp/hyperfine#installation.
npm install
npm run generate
npm run measure
You can manually measure individual cases by running hyperfine ../../node_modules/eslint/bin/eslint.js --ignore-failure --warmup 1
.
The caseEntries
values in src/data.ts
can be modified to test:
files
: roughly how many generated files should be lintedlayout
: what rough shape of imports those files exhibit:"even"
: a single root-levelindex.ts
importing from roughly an even triangle shape of files"references"
: a single root-leveltsconfig.json
with project references to a few projects"wide"
: one root-levelindex.ts
importing from all files in the project
singleRun
: whether to enable single-run inference as a performance boosttypes
: whether to useparserOptions.project
orparserOptions.projectService
for typed linting
Right now, parserOptions.project
with single-run inference outperforms parserOptions.projectService
.
This is a performance issue and we are investigating it as a bug.
┌───────┬───────────────────────┬───────────────────────┐
│ files │ project (even layout) │ service (even layout) │
├───────┼───────────────────────┼───────────────────────┤
│ 1024 │ '2.371 s ± 0.029 s' │ '2.724 s ± 0.049 s' │
└───────┴───────────────────────┴───────────────────────┘
See typescript-eslint/typescript-eslint#9571 Performance: parserOptions.projectService no longer outperforms parserOptions.project in typescript-eslint.
- Example measurements taken on an M1 Max Mac Studio with Node.js 22.12.0
- These results are similar across TypeScript versions: 5.0.4, 5.4.5, and 5.5.3
The comparisons/
directory contains details on more specific comparisons.
See each comparisons/*.md
file for details on what's being measured.
The traces/
directory contains more specific traces for investigations.
✨ You might consider using 0x for nice flamegraph visuals.
All comparisons were run on a common shape of linting: 1024 files with the "even" (triangle-shaped) imports layout.
Jake Bailey 🤔 |
Josh Goldberg ✨ 🤔 🚇 🚧 📆 🔧 |