vscode启动慢八成因插件冷启动抢跑;用code --disable-extensions秒开可确认问题在扩展,再通过developer: show running extensions查看activation time超1000ms、status为activating或activation events为"*"/"onstartupfinished"的插件定位元凶,并设extensions.experimental.affinity延迟加载或调整files.watcherexclude优化。

VSCode 启动慢,八成是某个插件在冷启动时抢跑——不是它“装得多”,而是它声明了 "*" 或 "onStartupFinished" 这类宽泛的激活事件,一开就拉进程、扫文件、建索引,哪怕你只打开一个 README.md。
用 code --disable-extensions 快速验证是不是插件问题
别等加载动画转完。终端执行该命令,VSCode 会秒开,且基础语法高亮、跳转、快捷键全正常(内置能力不受影响)。如果此时流畅,而平时卡在 “Activating Extensions” 阶段,那问题 100% 出在扩展上。
- 这个命令不改任何设置,也不卸载插件,只是临时屏蔽,比手动禁用快得多也更干净
- 验证后不用关掉窗口,直接按
Ctrl+Shift+P(Win/Linux)或Cmd+Shift+P(macOS),输入并运行Developer: Show Running Extensions - 注意:某些插件(如
ms-python.python)即使没打开 Python 文件也会激活,所以不能靠“我没写 Python”来排除
看 Developer: Show Running Extensions 找出真正在拖慢的插件
这个面板不是罗列“已启用”,而是显示当前真正在后台干活的扩展,重点关注三列:
-
Activation Time (ms)超过 1000 的,基本等于在编辑器刚露头时就抢走控制权;超过 1500 的(比如旧版ms-python.python或eamodio.gitlens)大概率是元凶 -
Status长期显示Activating...或空白,说明它卡住了但没报错,还在后台占着线程 -
Activation Events是关键线索:右键插件 →Extension Details→ 看 “When” 字段,值为"*"、"onStartupFinished"或"onLanguage:json"这种不加限制的匹配,就是默认就干重活的信号
别急着卸载,先调配置或设延迟加载
很多“重”是默认太莽,不是插件本身不行。比如 gitlens 默认全仓库扫描历史,ms-vscode.js-debug 即使你不调试 JS 也硬启调试服务。
- 优先改配置而非禁用:
gitlens.advanced.caching.enabled设为false,eslint.run改成onType而非onSave - VSCode 1.86+ 支持细粒度延迟加载:在
settings.json中加"extensions.experimental.affinity",例如:"extensions.experimental.affinity": { "esbenp.prettier-vscode": 2, "redhat.vscode-yaml": 2 }其中2表示“首次调用功能时才加载”,不改变插件逻辑,只挪动时机 - 禁用选
Disable (For All Folders),不是Disable (Workspace)——后者只对当前项目生效,重启后其他项目仍可能被拖慢
配合 code --status 和 files.watcherExclude 排除干扰
code --status 输出里的 Extensions 区域,会标出每个插件的真实激活耗时,比 GUI 更准;而文件监视器(chokidar)一旦监听 node_modules 这类目录,CPU 就会持续飙高,间接拖慢插件加载。
- 必须在项目根目录的
.vscode/settings.json中配files.watcherExclude,不能只靠用户级设置 - 至少包含:
"files.watcherExclude": { "**/node_modules/**": true, "**/dist/**": true, "**/build/**": true, "**/.git/**": true } - Linux/macOS 用户若仍卡顿,检查
cat /proc/sys/fs/inotify/max_user_watches,低于524288就要调高
真正难搞的不是报错的插件,而是那个长期卡在 Activating... 却不崩溃、不退出、也不释放线程的插件——它会让后续所有插件排队等,而 Developer: Show Running Extensions 和 code --status 是唯一能把它揪出来的组合工具。











