执行code --disable-extensions秒开且功能正常,则问题100%出在扩展;再运行developer: show running extensions,重点检查activation time超1000ms或状态为activating/activation failed的插件,并结合code --status验证耗时,同时配置files.watcherexclude排除干扰目录。

怎么快速确认是插件拖慢启动
别等加载动画转完。终端执行 code --disable-extensions,如果秒开、语法高亮和跳转都正常,问题 100% 出在扩展上。
接着按 Ctrl+Shift+P(Windows/Linux)或 Cmd+Shift+P(macOS),运行 Developer: Show Running Extensions,重点关注两列:
-
Activation Time (ms)超过 1000 的插件,基本等于在编辑器刚露头时就抢走控制权 - 状态长期显示
Activating或Activation failed的,说明它卡住了,但还在后台占着线程
顺手执行 code --status,输出里 Extensions 区域会标出每个插件的真实激活耗时,比 GUI 更准。
哪些插件最常在启动时“卡死”
它们不显眼,但默认声明 "activationEvents": ["*"] 或 "onStartupFinished",一启动就干重活:
-
ms-vscode.js-debug:即使你从不调试 JS,也会初始化完整调试服务 -
ms-vscode.vscode-typescript-next:无tsconfig.json也硬拉 TS 服务器,吃内存且不可跳过 -
gitlens:默认开启全仓库历史扫描和符号缓存,gitlens.advanced.caching.enabled不关,内存涨几百 MB -
ms-python.python:尤其旧版本,即使只打开.txt文件也会尝试初始化 Python 环境 -
Remote - SSH:连接远端失败时 UI 线程直接挂起,表现为“卡住几秒没报错”
这些插件的 package.json 里通常含通配符激活声明,不是装得多,而是某个插件抢在启动时就干重活。
禁用前先调配置,很多“重”是默认太莽
卸载不是第一选择。很多插件卡顿源于默认开启了全量监听或实时索引:
-
GitLens默认开启全仓库历史扫描 → 改"gitlens.advanced.caching.enabled": false,内存直降 -
TypeScript扩展默认加载所有@types→ 改"typescript.preferences.includePackageJsonAutoImports": "auto",TSServer 启动快一倍 -
ESLint默认onType实时检查 → 改成"eslint.run": "onSave",敲字不卡,保存再报错
所有调整必须写入项目级 .vscode/settings.json 或用户 settings.json,改完需关闭并重新打开工作区才生效。
files.watcherExclude 不配,插件再轻也白搭
VSCode 的文件监听器(chokidar)一旦被 node_modules、.git 这类目录拖住,所有插件的触发逻辑都会变慢——因为它们都依赖这些事件。
必须加进 settings.json:
"files.watcherExclude": {
"**/node_modules/**": true,
"**/.git/**": true,
"**/dist/**": true,
"**/build/**": true,
"**/__pycache__/**": true
}
**/ 是关键,单星号 */ 或漏掉斜杠会失效;路径通配符必须双星号开头,否则子目录照样扫。改完后必须关闭并重新打开当前工作区,设置才真正加载;只刷新窗口没用。
真正容易被忽略的是:这个配置必须放在工作区级 .vscode/settings.json 里,而不是用户级设置——不同项目结构差异大,通用规则反而会拖累小项目。











