Skip to content

typescript-eslint/performance

Repository files navigation

typescript-eslint Performance Comparisons

Various performance baselines for typescript-eslint.

👪 All Contributors: 2 🤝 Code of Conduct: Kept 📝 License: MIT 💪 TypeScript: Strict

Usage

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.

Measured Attributes

The caseEntries values in src/data.ts can be modified to test:

  • files: roughly how many generated files should be linted
  • layout: what rough shape of imports those files exhibit:
    • "even": a single root-level index.ts importing from roughly an even triangle shape of files
    • "references": a single root-level tsconfig.json with project references to a few projects
    • "wide": one root-level index.ts importing from all files in the project
  • singleRun: whether to enable single-run inference as a performance boost
  • types: whether to use parserOptions.project or parserOptions.projectService for typed linting

Results

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.

Result Measurement Notes

  • 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

Comparisons

The comparisons/ directory contains details on more specific comparisons. See each comparisons/*.md file for details on what's being measured.

Traces

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.

Contributors

Jake Bailey
Jake Bailey

🤔
Josh Goldberg ✨
Josh Goldberg ✨

🤔 🚇 🚧 📆 🔧

About

Various performance baselines for typescript-eslint.

Resources

License

Code of conduct

Security policy

Stars

Watchers

Forks