developer: startup performance 输出真实采样数据,关键看 main.startup.duration、renderer.startup.duration 和各扩展 activationtime;activationtime 超 300ms 的插件(如 gitlens)常因 onstartup 加载语言服务器导致卡顿;main 偏高需排查主进程阻塞,renderer 偏高则聚焦 ui 渲染层;files.watcherexclude 需写在工作区 settings.json 且 glob 必须带尾部斜杠;--prof-startup 参数顺序错误或与 --wait 冲突会导致数据失真;gpu 加速效果因硬件而异,webgl 上下文失败提示是关键诊断信号;多因素叠加才是卡顿根源。

Developer: Startup Performance 能看出什么
这个命令不是“看看启动快不快”的装饰面板,它输出的是真实采样数据,每一毫秒都对应具体模块的初始化行为。关键要看 main.startup.duration、renderer.startup.duration 和各扩展的 activationTime 三项。
常见错误现象:报告里出现多个扩展的 activationTime 超过 300ms,尤其是 GitLens、ESLint、Python 这类语言服务插件——它们常在 onStartup 阶段就加载完整语言服务器,而非按需触发。
- 如果
main.startup.duration明显高于基准(如 TypeScript 工作区 >980ms),说明主进程初始化受阻,优先排查--disable-extensions模式下是否恢复 - 若
renderer.startup.duration偏高但main正常,问题大概率出在 UI 渲染层,比如主题动画、图标字体加载或 GPU 加速异常 -
activationTime排名靠前的扩展,不要直接卸载,先改用 workspace 级别禁用:"extensions.ignoreRecommendations": true+ 手动启用当前项目所需插件
files.watcherExclude 配置失效的真正原因
很多人加了 "files.watcherExclude" 却发现 node_modules 还在被扫描,不是配置写错了,而是 VSCode 的监听器分两层:上层是编辑器逻辑,下层依赖操作系统 inotify/fsevents 句柄。配置只影响上层过滤,底层句柄一旦耗尽,整个监听机制就会降级甚至卡死。
典型表现:保存文件后 Git 状态不更新、搜索突然变慢、CPU 持续 100% 却无明显进程占用。
- Linux 下检查句柄上限:
cat /proc/sys/fs/inotify/max_user_watches,低于524288就必须调高 - macOS 上
fsevents对深层嵌套路径有隐式限制,此时要加"files.useExperimentalFileWatcher": false切回chokidar -
"files.watcherExclude"的 glob 模式必须带尾部斜杠:"**/node_modules/**"有效,"**/node_modules"无效 - 排除项不继承自用户 settings.json,必须写在工作区根目录的
.vscode/settings.json中才生效
code --prof-startup 启动参数的实操陷阱
--prof-startup 是唯一能捕获 V8 初始化、模块加载、JS 编译等冷启动关键路径的开关,但它极易被误用导致数据失真。
常见错误现象:导出的 profile 文件为空、时间戳异常、或 main.startup.duration 显示为 0 —— 基本都是启动参数顺序或环境干扰导致。
- 参数必须放在
code命令之后、其他参数之前,例如:code --prof-startup --disable-extensions .,而不是code . --prof-startup - 不能和
--wait同时使用,否则会阻塞采样完成;需要等待窗口完全渲染后再手动触发Developer: Startup Performance - macOS 上若启用了 Rosetta 2 兼容层,V8 采样器可能无法正确注入,需用原生 Apple Silicon 版本 VSCode
- 导出的 JSON 报告中,
main.startup.duration是从二进制加载开始计时,不含系统预热时间,所以单次测量意义不大,建议用脚本跑 5–10 次取中位数
GPU 加速开关的实际效果取决于硬件组合
启用 --enable-gpu 或 --disable-gpu 不是“开就变快、关就变慢”的简单逻辑,它直接影响渲染线程调度、纹理上传方式和内存分配策略。M 系列 Mac、NVIDIA RTX 笔记本和 Intel 核显老本的表现完全相反。
最常被忽略的信号是控制台里的 WebGL 上下文创建失败提示,但它往往藏在 DevTools 的 Console 标签页底部,滚动几屏才看到。
- 启动时加
--enable-gpu --enable-gpu-rasterization,再打开 DevTools → Console,搜WebGL,若出现Failed to create WebGL context,说明 GPU 驱动不兼容,此时强制启用反而拖慢 - Intel HD Graphics 620/630 用户,
--disable-gpu通常能降低内存峰值 200–400MB,但滚动帧率会掉到 30fps 以下 - M3/M4 Mac 用户若外接 DisplayPort 显示器,关闭 GPU 加速会导致多显示器缩放异常,必须保留
--enable-gpu - 设置
"workbench.enableExperiments": false是前提,否则实验性渲染功能会覆盖 GPU 参数行为
真正卡顿的根源,往往不在某一行配置,而在于多个低效动作的叠加:一个 onStartup 激活的插件 + 未排除的 node_modules + inotify 句柄不足 + GPU 上下文创建失败。诊断时得把它们当成一个耦合系统来看,而不是孤立调参。











