先运行code --status定位高占用子进程(如Extension Host、tsserver、eslint-language-server),再配置files.watcherExclude排除node_modules等目录、降级语言服务(如ESLint设onType、TS关autoImports、Python换Jedi)、彻底禁用插件并手动清理残留进程。

静态分析插件(如 ESLint、Prettier、TypeScript 语言服务)CPU 占用高,不是它们“写得差”,而是默认配置在大型项目中过度索引、重复触发、监听失控——优化核心是收窄作用域、降级语义深度、切断无效监听。
如何用 code --status 快速锁定真实罪魁
别信任务管理器里那个“Code Helper”进程,它只是壳。真正吃 CPU 的是子进程:Extension Host、tsserver、eslint-language-server 或 prettier 启动的 Node 进程。
终端直接运行 code --status,看三列:
• Extension Host CPU% 长期 >50% → 某个静态分析插件在反复解析或监听失败后卡死
• 出现 tsserver 或 eslint-language-server 进程且内存 >400MB → 它正在全量加载 node_modules/@types 或遍历整个依赖树
• args 列含 --stdio 和路径指向 esbenp.prettier-vscode 或 dbaeumer.vscode-eslint → 就是它
files.watcherExclude 配错等于没配
VSCode 默认用 chokidar 递归监听整个工作区,遇到 node_modules(几万小文件)、dist、.git 就触发 inotify 事件风暴,Node 子进程满载——你什么都没干,CPU 就飙到 70%。
必须在项目根目录的 .vscode/settings.json 中添加(不是用户级设置):
{
"files.watcherExclude": {
"**/node_modules/**": true,
"**/dist/**": true,
"**/build/**": true,
"**/.git/**": true,
"**/*.log": true
}
}• 通配符必须是
**/xxx/**,写成 *node_modules*、/node_modules/ 或 node_modules 全无效• 配置生效需完全关闭当前 VSCode 窗口,再重新打开工作区(仅保存不触发更新)
• Linux 用户若仍卡顿,检查
cat /proc/sys/fs/inotify/max_user_watches,低于 524288 需手动调高
降级语言服务比禁用插件更实用
ESLint 和 Prettier 不是“慢”,是默认在保存时做双重校验+格式化;TS/Python 语言服务也不是“卡”,是试图把整个 node_modules 加载进内存推导类型。
实操建议:
• ESLint:设 eslint.run 为 onType(非 onSave),并精简 eslint.probe(比如去掉 .json、.md)
• Prettier:关掉 prettier.requireConfig(避免无配置时反复扫描)
• TypeScript:设 typescript.preferences.includePackageJsonAutoImports 为 off,关掉 typescript.suggest.autoImports
• Python:把 python.languageServer 从 Pylance 改为 Jedi(Jedi 不做全量语义分析,开销直降 60%+)
禁用后残留进程和配置会悄悄复活
点“Disable”只是阻止新加载,旧进程常驻内存。很多插件注册了 onLanguage:javascript 或 onStartupFinished,一旦激活就一直跑着。
必须:
• 先运行命令面板中的 Developer: Show Running Extensions,确认插件真在运行中
• 右键 → Disable (For All Folders)(注意不是仅当前工作区)
• 完全关闭当前 VSCode 窗口(不是 Developer: Reload Window)
• 手动清理残留:ps aux | grep -i "eslint\|prettier\|tsserver",找到 PID 后 kill -9 [PID]
• 检查 settings.json 是否还留着 eslint.enable、prettier.requireConfig 等字段,这些会触发后台检查
• 删除 .vscode/extensions.json 中的推荐项,否则一打开文件夹就会弹窗提示安装
最易被忽略的是:语言服务器的“深度”和“广度”是两个独立维度——改一个配置(比如关 autoImports)可能只降 CPU,但不动 files.watcherExclude,它仍会在你切文件时偷偷重扫整个 node_modules。


















