eslint 支持多线程并发 Lint
内容提要
ESLint 于 2025 年合并了多线程 linting 功能,解决了十年来的性能问题,使大型项目的 lint 速度提升超过 30%。新增的 concurrency 属性默认关闭,需谨慎使用以避免增加开销。
关键要点
-
ESLint 于 2025 年合并了多线程 linting 功能,解决了十年来的性能问题。
-
新增的 concurrency 属性默认关闭,需谨慎使用以避免增加开销。
-
多线程可以让 ESLint 在大型项目多个文件的速度提升超过 30%。
-
ESLint CLI 新增 concurrency 参数,可以设置为 off、auto 和一个数字。
-
当前 ESLint 版本 9.33.0 尚未包含该 PR,预计下个版本 9.34.0 将包含此改动。
-
配置 concurrency: auto 时,会考虑容器限制并获取最大并行度。
-
worker 线程的创建和管理通过 node:worker_threads 模块实现。
-
多线程的开销可能会增加 Lint 时长,因此不应随意开启。
延伸问答
ESLint 的多线程 linting 功能有什么优势?
多线程 linting 功能可以使 ESLint 在大型项目中多个文件的 lint 速度提升超过 30%。
如何配置 ESLint 的 concurrency 属性?
concurrency 属性可以设置为 off、auto 或一个数字,默认值为 off。
使用多线程 linting 时需要注意什么?
需要谨慎使用多线程,因为它可能增加 Lint 的开销,导致 lint 时长增加。
ESLint 的最新版本包含多线程功能吗?
截至目前,ESLint 版本 9.33.0 尚未包含多线程功能,预计下个版本 9.34.0 将包含此改动。
如何在 ESLint 中设置最大并行度?
当配置 concurrency: auto 时,ESLint 会使用 os.availableParallelism() 方法获取最大并行度,并考虑容器限制。
多线程 linting 的开销主要来自哪里?
多线程的开销主要来自于创建和销毁 worker 以及进程间通信等。