extensions.experimental.affinity 是唯一能强制延迟加载插件的官方机制,设为 2 可使 python、prettier、eslint 等插件仅在触发对应文件或命令时加载,需写入 settings.json 并完全重启 vscode 生效。

插件过多导致 VSCode 启动慢,根本不是“装太多”,而是默认全量同步激活——extensions.experimental.affinity 是唯一能绕过插件自身 activationEvents、强制延迟加载的官方机制。
哪些插件适合设为延迟加载
不是所有插件都支持延迟,但以下几类只要 VSCode 版本 ≥1.86(2024 年后基本都满足),设 affinity: 2 就生效:
-
ms-python.python:旧版启动时会解压语言服务器并校验环境,卡顿明显 -
esbenp.prettier-vscode:只要项目里有.prettierrc,它就在启动时解析整个配置链 -
dbaeumer.vscode-eslint:即使没开实时检查,也会在启动时读取eslint.config.js和依赖路径 -
redhat.vscode-yaml和ms-azuretools.vscode-docker:声明了"*"或"onStartupFinished"激活事件,一开就加载
注意:affinity: 2 对主题类、Snippets 类插件无效(它们本就不耗资源),也对已卸载或禁用的插件无影响。
怎么正确配置 extensions.experimental.affinity
这个设置必须写进 settings.json,且只接受对象字面量,不能是数组或布尔值:
{
"extensions.experimental.affinity": {
"ms-python.python": 2,
"esbenp.prettier-vscode": 2,
"dbaeumer.vscode-eslint": 2
}
}
关键细节:
- 扩展 ID 必须完全匹配(大小写敏感),可在插件页 URL 或
Developer: Show Running Extensions列表里复制 - 数字
2表示“仅在打开对应文件类型或执行相关命令时加载”,1是默认行为,0表示禁止加载(慎用) - 改完必须完全退出 VSCode(macOS 上要
Cmd+Q,Windows/Linux 要关掉所有窗口再结束进程),否则不生效
为什么设了 affinity 还是启动卡
常见失效原因不是配置错,而是被其他机制覆盖或干扰:
- 插件本身设置了
"activationMode": "always"(如某些 GitLens 配置),会无视affinity,需额外在插件设置里手动关掉 - 工作区根目录下有
.vscode/settings.json,而你改的是用户级settings.json—— 优先级:工作区 > 用户,务必确认改对位置 - 同时启用了
extensions.autoUpdate: true,VSCode 会在启动时发起 HTTP 请求查更新,锁住主线程;建议一并设为false - 远程开发(SSH/WSL)连接未断开,
Remote - SSH插件会阻塞本地启动流程,哪怕你没打开远程文件夹
验证是否真正延迟加载
别信“好像快了”,用两个内置命令交叉验证:
- 启动后立刻运行
Developer: Show Running Extensions,目标插件状态应为Activated但 CPU 列几乎为 0,Startup Time 很低;等你打开一个.py文件,再刷新列表,ms-python.python的 CPU 才开始跳动 - 运行
Developer: Startup Performance,在 “Extensions” 分组下,这些插件的 “Start Delay” 应从几百毫秒降到个位数
最硬核验证:终端执行 code --prof-startup,生成的 profile 文件里,对应插件的 activate 调用栈应出现在你首次触发动作之后,而非启动初期。











