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 measureYou 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.tsimporting from roughly an even triangle shape of files"references": a single root-leveltsconfig.jsonwith project references to a few projects"wide": one root-levelindex.tsimporting from all files in the project
singleRun: whether to enable single-run inference as a performance boosttypes: whether to useparserOptions.projectorparserOptions.projectServicefor 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 ✨ 🤔 🚇 🚧 📆 🔧 |