插件加载慢的关键在于activationevents配置过宽(如"*"或"onstartupfinished")导致强制早期激活,以及vs code扫描extensions目录时遭遇损坏插件或密集io;需禁用非必要插件、清理异常扩展目录、设置affinity延迟加载,并通过--prof-startup定位高require time插件。

为什么插件加载慢?关键在 activationEvents 和路径扫描
VS Code 启动时并不会立刻加载所有插件,而是按 activationEvents 触发条件决定谁先“上场”。如果某个插件的 package.json 里写了 "*" 或 "onStartupFinished",它就会在启动初期被强制激活——哪怕你根本没打开相关文件。这类插件(比如 ESLint、Prettier、vscode-leetcode)往往要初始化语言服务器、读取配置、发起网络请求,直接拖慢首屏时间。
同时,VS Code 默认会扫描 .vscode/extensions 目录下所有子文件夹,逐个读取 package.json。插件越多,IO 越密集;若目录混杂了损坏或半安装的插件(比如下载中断留下的空文件夹),扫描过程可能卡住或反复重试。
- 检查插件是否真需要“开机即用”:打开命令面板,执行
Developer: Show Running Extensions,看哪些插件Activation Time> 300ms - 禁用非核心插件:比如暂时关掉
Remote - SSH、Docker、GitHub Copilot等非当前项目必需的扩展 - 清理 extensions 目录:手动删掉
.vscode/extensions下名字含.unfinished、.tmp或为空的文件夹(Windows 在%USERPROFILE%\.vscode\extensions,macOS/Linux 在~/.vscode/extensions)
如何让 Prettier / ESLint 等工具真正“懒加载”
Prettier 和 ESLint 插件默认行为激进:一打开 JS/TS 文件就立刻激活,但实际格式化或校验只在保存或手动触发时才真正需要。它们的高延迟常源于模块解析——尤其是 Prettier 要从 node_modules 里层层查找,甚至 fallback 到全局或内置版本。
优化核心是切断“打开即查”的链路,改用更窄的激活条件:
- 在
settings.json中显式关闭自动激活:"prettier.autoFormatOnSave": false,改用快捷键Shift+Alt+F手动触发 - 限制 ESLint 激活范围:
"eslint.enable": true保留,但确保其package.json的activationEvents是["onCommand:eslint.executeAutofix", "onLanguage:javascript"],而非["*"] - 指定本地 Prettier 路径:
"prettier.prettierPath": "./node_modules/prettier",避免插件向上遍历整个目录树找模块
缓存不是开关,而是路径与信任的组合效果
VS Code 的缓存(Extension Host 缓存、Renderer 缓存)生效有前提:工作区必须被标记为“可信”,且没有因配置变更强制重载。常见误区是以为清掉 Cache 目录就能提速——其实那只是临时文件,真正影响二次启动的是 Extension Host 对已加载模块的内存快照和 Renderer 对 UI 状态的序列化。
- 启用 Workspace Trust:右下角点击锁图标 → “Trust Folder”,可信工作区跳过安全沙箱初始化,省掉 200–500ms
- 避免频繁修改
settings.json中的路径类配置(如files.associations、terminal.integrated.env),每次改都会触发扩展重注册 - 不要手动删
Cache目录:它由 VS Code 自动管理;真正该定期清理的是~/.vscode/extensions和~/.vscode/data下的Machine子目录(后者存着旧版插件元数据)
启动慢?先看 --prof-startup 输出里的“Require Time”
光靠肉眼判断哪个插件慢不靠谱。code --prof-startup 生成的火焰图里,“Require Time”字段才是真相——它反映的是 Node.js require() 或 import() 加载插件主模块的实际耗时,而非网络或渲染时间。很多插件慢不是因为代码差,而是依赖了体积大、解析慢的包(比如带大量 JSON Schema 校验的插件)。
- 运行
code --prof-startup后,VS Code 会自动打开性能报告页,重点关注“Extension Activation”段中各插件的Require Time - 若发现某插件 Require Time > 800ms,检查其
node_modules是否包含ajv、json-schema-ref-parser等重型依赖 - 对高 Require Time 插件,可尝试用
extensions.experimental.affinity降权:"extensions.experimental.affinity": { "esbenp.prettier-vscode": 5 }(数字越小,越晚加载)
路径和缓存本身不产生性能,它们只是放大或抑制插件设计缺陷的杠杆。真正卡顿的根源,永远藏在 activationEvents 的宽泛性、模块 require 的深度、以及工作区信任状态的反复切换里。











