VSCode启动慢八成因插件activationEvents设为"*"或"onStartupFinished"导致冷启动抢跑;需运行Developer: Startup Performance和Developer: Show Running Extensions定位高耗时插件,再通过extensions.experimental.affinity或remote.extensionKind配置延迟加载,并在项目级.vscode/settings.json中正确设置files.watcherExclude排除node_modules等目录。

VSCode 启动慢,八成不是机器不行,而是扩展在冷启动时抢跑——activationEvents 设为 "*" 或 "onStartupFinished" 的插件一开就全量加载,哪怕你只打开一个 README.md。
怎么看哪个插件在拖慢启动
别猜,直接看 VSCode 自己的账单:
- 按
Cmd+Shift+P(macOS)或Ctrl+Shift+P(Windows/Linux),运行Developer: Startup Performance - 重点关注 “Activation Time” 列,排序后找出 >300ms 的插件;若显示
activated by another extension,说明它是被连带唤醒的,得顺藤摸瓜查源头 - 再运行
Developer: Show Running Extensions,观察 “Activation Events” 值:是"*"、"onStartup"还是"onLanguage:typescript"?前者就是高危项 - 注意:禁用插件(
Disable (For All Folders))后必须完全退出 VSCode(macOS 用Cmd+Q),否则旧进程可能还在内存里跑
怎么让插件真正“按需加载”而不是“一哄而上”
光禁用不够,得改加载策略:
- 对老旧或不规范插件(如 ESLint、YAML、Prettier),在
settings.json中加extensions.experimental.affinity配置:"extensions.experimental.affinity": { "esbenp.prettier-vscode": 2, "redhat.vscode-yaml": 2, "ms-python.python": 2 }数字2表示“首次调用命令或打开匹配文件时才激活”,比禁用更细粒度 - 对语言服务器类插件(如
rust-lang.rust-analyzer、ms-python.python),用remote.extensionKind强制延迟:"remote.extensionKind": { "ms-python.python": ["workspace"], "rust-lang.rust-analyzer": ["workspace"] }这个配置必须写进settings.json(全局或工作区),UI 设置无效 - 别给所有插件都设
2——像你每天写 Python,ms-python.python设为1(正常加载)反而更稳;Remote - SSH 这类非日常插件才适合2
为什么改了 files.watcherExclude 能立竿见影
VSCode 默认用 chokidar 监视整个工作区。一旦打开含 node_modules 的目录,它会尝试注册数万级监听句柄——匹配失败就 fallback 到轮询,CPU 持续 30%+,保存卡顿、补全延迟全来了。
- 必须写在项目根目录的
.vscode/settings.json中(用户级设置无效):"files.watcherExclude": { "**/node_modules/**": true, "**/dist/**": true, "**/.git/**": true, "**/build/**": true, "**/logs/**": true, "**/__pycache__/**": true } - 路径末尾必须带
/**,写成"**/node_modules"就会失效 - Linux 用户检查
/proc/sys/fs/inotify/max_user_watches,若低于524288,运行echo 524288 | sudo tee /proc/sys/fs/inotify/max_user_watches - 绝对不要把
/、/Users/xxx或C:\当工作区打开——等于命令 VSCode 全盘监听
最常被忽略的一点:插件的 activationEvents 是硬开关,禁用操作只是表层遮盖;真正决定“是否加载”的是它声明的触发条件。优化不是删功能,而是让非必要项不抢跑——尤其当多个插件(如 GitLens + ESLint + Prettier)都监听 onStartupFinished 时,叠加耗时极易突破 500ms。



















