vscode扩展加载慢主因是activationevents设为*或未声明导致全量启动;应查developer: startup performance和show running extensions定位高危插件,用extensions.experimental.affinity=2强制延迟加载,并精准配置files.watcherexclude排除node_modules等目录。

VSCode 扩展加载慢,核心不是插件本身“写得差”,而是它们被错误地提前激活、重复监听或在不该出现的场景里抢资源——尤其当 activationEvents 设为 * 或压根没声明时,所有扩展会在你打开一个空文件夹时就全部启动。
怎么查哪个扩展在拖慢启动
别猜,直接看实测数据:
- 按
Ctrl+Shift+P(Windows/Linux)或Cmd+Shift+P(macOS),输入并执行Developer: Startup Performance,重点关注 “Extension Activation” 占总耗时是否超 40% - 再执行
Developer: Show Running Extensions,按 “Startup Time” 或 “Memory” 排序,找出前 3 名;注意看它的Activation Events列:含*或onStartup的就是“一启动就全员到岗”的高危插件 - 临时禁用可疑扩展后,用命令行
code --disable-extensions重开 VSCode,对比卡顿是否消失——这是验证因果关系最干净的方式
如何让扩展真正“按需加载”
靠插件自己声明 activationEvents 不够可靠,尤其老旧插件可能根本没配。VSCode 1.86+ 提供了更底层的强制调度机制:extensions.experimental.affinity。
- 值为
2表示“仅在首次调用其命令或打开匹配语言文件时才激活”,对 GitLens、Prettier、YAML 等插件特别有效 - 必须写进
settings.json,例如:"extensions.experimental.affinity": { "esbenp.prettier-vscode": 2, "redhat.vscode-yaml": 2, "ms-python.python": 1 } -
1是默认行为(正常加载),2是延迟加载,但别全设成2——像 Python 扩展若你每天写 Python,设为1反而更稳;Remote - SSH 这类低频插件才适合2 - 该配置支持工作区级,推荐放在项目根目录的
.vscode/settings.json中,避免全局一刀切
为什么 files.watcherExclude 配错会导致 CPU 持续飙高
这个配置不是“隐藏文件”,而是告诉 VSCode 的文件监视器(chokidar):“这些路径你别盯”。一旦漏配或写错,系统级监视器(如 macOS 的 FSEvents)会 fallback 到轮询模式,每秒扫成千上万个文件,CPU 直接干到 30%+。
- 必须用 glob 语法,且路径末尾带
/**:正确是"**/node_modules/**": true,错误是"**/node_modules": true(少斜杠) - 至少包含:
"**/node_modules/**": true、"**/dist/**": true、"**/.git/**": true、"**/__pycache__/**": true - Python 项目加:
"**/venv/**": true、"**/.mypy_cache/**": true;前端加:"**/build/**": true、"**/out/**": true - 改完必须关闭整个工作区再重新打开,否则不生效——VSCode 不会热重载这个配置
禁用扩展比优化设置见效更快
很多用户花时间调参数,却忽略最直接的手段:停掉根本不用的扩展。尤其是那些“看起来有用但一年只用一次”的插件,它们在后台持续占用内存、监听文件变更、甚至启动独立语言服务器。
- 打开
Extensions: Show Running Extensions后,重点关掉:ESLint(若项目用其他方式校验)、Auto Import、GitLens(若只用基础 Git 功能)、Docker、Kubernetes 等重型插件 - 禁用后观察:打字是否变跟手?保存是否不再卡顿?Git 状态栏刷新是否恢复即时?这些才是真实性能反馈
- 别迷信“官方推荐”或“高评分”,要看你当前项目是否真需要它——比如 TypeScript 项目里装 Vue 插件,它照样会监听
.vue文件并尝试解析
最容易被忽略的是:files.watcherExclude 必须精确到每个项目的工作区级配置,且路径不能少任何一级通配符;而 extensions.experimental.affinity 的数字含义(1 vs 2)直接影响扩展是“冷启动就加载”还是“你点它才动”,这两个点一旦配错,其他优化基本白做。











