Reputation: 12372
I have a config with around 100 rules, and running eslint on my project with all these rules takes around 10 seconds. I'd like to identify the slowest rules and eliminate some of them. How do I do this? Is there any profiler tool for eslint?
Upvotes: 87
Views: 45373
Reputation: 2227
eslint shows the spent times of rules if the environment variable TIMING
is set.
For example:
$ TIMING=1 eslint lib
Rule | Time (ms) | Relative
:----------------------------|----------:|--------:
valid-jsdoc | 203.798 | 6.7%
camelcase | 142.146 | 4.6%
no-unmodified-loop-condition | 136.811 | 4.5%
indent | 127.138 | 4.2%
no-undefined | 124.525 | 4.1%
keyword-spacing | 85.397 | 2.8%
space-in-parens | 76.179 | 2.5%
no-this-before-super | 72.317 | 2.4%
no-implied-eval | 69.945 | 2.3%
space-infix-ops | 57.128 | 1.9%
See also the official docs on Profile Rule Performance.
Upvotes: 174
Reputation: 7551
In my case I'm using @typescript-eslint/eslint-plugin
(linting with type information) and I'd misconfigured the tsconfig include
field. Based on this doc you have to include all your files. So I updated my eslint configuration:
module.exports = { overrides: [ { files: ['*.ts'], parserOptions: { -project: ['tsconfig.json'],-createDefaultProgram: true,+ project: ['tsconfig.json', './projects/*/tsconfig.json'], + createDefaultProgram: false, }, } ] }
This can also happen if you're using @angular-eslint/eslint-plugin
. Read the performance section of their docs
You can read this article for Maximizing ESLint Performance in TypeScript Projects
Upvotes: 2
Reputation: 1928
I encountered this issue as well, this was because I enabled createDefaultProgram: true
, removing it increased my performances significantly !!
Upvotes: 1
Reputation: 4326
I found that removing slow rules didn't really help that much, as loading eslint
and parsing files takes a while.
It is possible to use the --cache
option of eslint
(docs) to speed things up substantially.
When using eslint
to "lint-as-you-type" in various editors, installing eslint_d allows running eslint
as a daemon, and saves the node
loading time.
On the project I'm currently working on, combining both eslint_d
and --cache
brought the linting time from 4+ seconds to 0.17!
Upvotes: 43