user settings.json过大直接拖慢vscode启动,超200行或含冗余注释、重复键、全局映射时解析耗时激增至数百毫秒;应清理注释、合并重复项、移至语言专属设置,并检查keybindings.json、snippets/及扩展activationevents影响。

user settings.json 过大直接拖慢启动
VSCode 启动时会同步解析 settings.json,一旦文件超过 200 行、含大量嵌套对象或 JSON Schema 校验逻辑(比如自定义正则、动态路径表达式),解析耗时会从几毫秒跳到几百毫秒。这不是“卡”,而是主线程被阻塞——你点开编辑器前,它已经在等 JSON.parse 完成。
- 用
Developer: Startup Performance查看 “Settings” 耗时项,若 >150ms 就该动手了 - 删掉注释(JSON 不支持注释,VSCode 会静默忽略但 parser 仍要扫描)、合并重复键(如多个
"editor.fontSize") - 避免在
settings.json里写"files.associations": { "*.log": "plaintext", "*.csv": "csv" }这类全局映射——改用语言专属设置(plaintext.settings.json)让 VSCode 按需加载
keybindings.json 和 snippets/ 目录是隐藏瓶颈
很多人只盯着 settings.json,却忘了快捷键和代码片段也是启动即载入的。一个含 50 条带 when 条件的 keybindings.json,或一个包含 200+ 个嵌套 body 的 snippets/ 目录,会让解析器反复做条件匹配和模板编译。
使用ydata-profiling(前身为pandas-profiling)生成全面的数据质量报告,包含相关性分析、缺失值模式和基数检测。导出交互式HTML仪表板和JSON摘要。
- 运行
Developer: Show Running Extensions,观察 “Keybinding Resolver” 是否长期占用 CPU - 把高频但低频触发的快捷键(如 Git commit 模板插入)移到命令面板(
Ctrl+Shift+P)里手动调用,而非绑定到物理按键 - 将通用 snippet 拆到对应语言子目录下(如
javascript/console.log.code-snippets),VSCode 只在打开 .js 文件时才加载它
extensions/ 中 package.json 的 activationEvents 白读不报错
扩展本身没启用,不代表它不拖慢启动。VSCode 会在启动时扫描所有已启用扩展的 package.json,提取 activationEvents 字段注册监听器。哪怕你从不写 Python,只要装了 Python 扩展,它的 "onLanguage:python" 就已注册——更糟的是 "*" 或 "onStartupFinished",等于告诉 VSCode:“一启动就找我”。
- 在命令面板执行
Developer: Startup Performance,重点关注 “Extensions” 分组里耗时 >50ms 的条目 - 禁用全部扩展后重启,逐个启用并测启动时间;优先干掉
activationEvents含"*"的扩展(常见于 Live Share、Copilot 插件) - 别信“插件轻量”,重点看它是否声明了
onStartupFinished——这个钩子意味着它放弃懒加载,抢在编辑器 UI 渲染完前就要初始化
watcherExclude 和 search.exclude 不生效?检查作用域优先级
files.watcherExclude 和 search.exclude 看似简单,但 VSCode 会按顺序合并用户设置、工作区设置、语言专属设置。如果工作区 .vscode/settings.json 里写了 "**/node_modules": false,它就会覆盖用户级的 true,导致文件监视器照常扫描数万个小文件。
- 打开开发者工具(
Help → Toggle Developer Tools),在 Console 中搜watcher或exclude,看实际生效的规则是否符合预期 - 统一用
**/node_modules/**而非**/node_modules——后者不匹配子目录下的node_modules/@types - 排除路径必须用双星号开头(
**/dist/**),单星号(*/dist/*)在某些版本中会被忽略










