vscode保存卡顿真凶常是onsave插件,如prettier、eslint、gitlens等在onsave事件中同步执行重操作导致主线程阻塞;应禁用高危插件、关闭自动触发、配置files.watcherexclude及大文件纯文本模式。

保存卡顿真凶常是 onSave 插件
VSCode 保存时卡顿,八成不是文件大或机器差,而是某个插件在 onSave 事件里同步执行了重操作——比如 Prettier 全文档格式化、ESLint 全量校验、或者 GitLens 自动提交前检查。这些动作默认阻塞主线程,用户会明显感到“光标停住、界面冻结、进度条转圈”。
- 不是所有“启用中”的插件都会参与保存流程,只看它是否声明了
"activationEvents": ["onSave"]或类似触发条件(可在插件package.json里查,但更简单的是看行为) - 典型高危插件:
esbenp.prettier-vscode、dbaeumer.vscode-eslint、gitlens、bradlc.vscode-tailwindcss(尤其开启tailwindCSS.experimental.classRegex时) - 禁用方式必须选对作用域:右键插件 → Disable (Workspace),避免影响其他项目;若确定长期不用,选 Disable (For All Folders)
- 禁用后无需重启窗口,但需关闭并重新打开当前文件(或切换到其他标签再切回),否则旧监听器可能仍驻留
如何确认哪个插件在 onSave 时拖后腿
别靠猜。打开命令面板(Ctrl+Shift+P / Cmd+Shift+P),运行 Developer: Show Running Extensions,重点看两列:
-
Status列显示Running且CPU列在你按Ctrl+S后突然跳高(>100MB 波动)的插件,基本就是它 -
Activation Time超过 500ms 的插件,大概率在保存瞬间被拉起——尤其是语言服务器类(如ms-python.python)或格式化类(如esbenp.prettier-vscode) - 若看到
Extension host terminated unexpectedly报错紧随保存操作出现,说明该插件的 onSave 处理逻辑崩溃了,但没退出进程,持续占用资源
比禁用更稳的方案:关掉 onSave 自动触发
很多插件支持配置“不自动在保存时运行”,既保留功能,又避开卡点。改项目根目录下的 .vscode/settings.json 即可:
- 对
prettier:加"prettier.requireConfig": true+ 在项目根加.prettierrc,否则它默认全文件格式化;再加"editor.formatOnSave": false(用快捷键Shift+Alt+F手动触发) - 对
eslint:设"eslint.run": "onSave"→ 改为"onType"或干脆"never",配合"eslint.enable": true保留手动扫描能力 - 对
gitlens:关掉"gitlens.advanced.messages": true和"gitlens.codeLens.enabled": false,它们常在保存时触发 Git 状态查询 - 所有修改后,必须关闭当前工作区窗口,再用
code .重新打开,设置才真正生效
大文件保存卡顿?先绕过语言服务器
当你编辑 bundle.js、vendor.css 或日志文件时,typescript-language-server 或 python-language-server 会试图构建 AST,直接卡死。这不是插件问题,而是 VSCode 默认把所有文件都交给语言服务处理。
- 在
.vscode/settings.json中加:"files.associations": {"bundle.js": "plaintext", "vendor.css": "plaintext"},让它们以纯文本模式打开,跳过语法解析 - 对 TypeScript 项目,加:
"typescript.preferences.includePackageJsonAutoImports": "auto",避免加载全量@types - 设
"typescript.tsserver.maxTsServerMemory": 8192,防止 TSServer 内存爆掉后反复重启 - 最关键一步:确保
files.watcherExclude已配好(含"**/node_modules/**"等),否则即使关了 onSave,插件仍会因文件变更事件被反复唤醒
真正难处理的不是某个插件报错,而是它悄悄注册了 onSave 监听却没做防抖或超时控制——比如一个图标插件,本不该参与保存,却因监听了 onFileSystem 事件,在写入瞬间被拉起并同步读取整个 node_modules。这类问题不会出现在控制台报错里,只能靠 Developer: Show Running Extensions 的 CPU 列和手动开关验证来揪出来。











