icodex | 前端技术博客 | 专注 React、TypeScript、AI 与性能优化 Blog

icodex - 个人网站

马上订阅 icodex | 前端技术博客 | 专注 React、TypeScript、AI 与性能优化 Blog RSS 更新: https://icodex.me/atom.xml

eslint 支持多线程并发 Lint

2025年8月19日 08:00

ESLint 于 2025/08/15 日合并了一个 PR:feat: multithread linting,这个 PR 解决了一个长达十年之久的 issue,是一个非常大的优化项。下面一起来看下这个 PR 改动了什么。

PR 改动

feat: multithread linting 这个 PR 改动的文件中,主要改动如下:

  1. ESLint nodejs api 新增 concurrency 属性;
  2. ESLint CLI 新增 concurrency 参数;
  3. concurrency 可以设置为 offauto 和一个数字;默认值为 off,也就是默认不启动多线程。

根据这个 PR 开发者的描述,启动多线程可以让 ESLint 在大型项目多个文件的速度表现上提升 30% 以上,虽然比不上用 Rust 或者 Go 编写的下一代 Lint 工具,但是相较于 ESLint 本身是非常大的提升了。

何时可用

截止到这篇文章的时间,ESLint 目前最新的版本 9.33.0 尚未包含这个 PR 改动的内容,我估计等下个版本 ESLint 就会包含这项改动了,也就是 9.34.0 版本。

ESLint 是如何计算 worker 线程数的

根据 PR 改动的代码细节,找到了 lib/eslint/eslint.js 这个文件中根据设置的 concurrency 对 worker 线程计算的方法,在 287 行

  1. 当配置 concurrency: auto 时,会使用 Node 的 os.availableParallelism() 方法获取进程真正可用的最大并行度,会考虑容器限制(Docker、K8s 限制 CPU quota 的情况);
  2. 当配置 concurrency 为一个数字时,会对比 concurrency 和 lint 文件数量,去最小值;
  3. 当计算出使用多少个 worker 时,就会使用 node:worker_threads 模块的 Worker 创建多个 worker 实例。
/**
* 计算使用多少个 worker
* @param {...

剩余内容已隐藏

查看完整文章以阅读更多