Obsidian Git 大 Vault 性能调优实战3 个手段把行作者延迟压进 410ms【免费下载链接】obsidian-gitIntegrate Git version control with automatic commit-and-sync and other advanced features in Obsidian.md项目地址: https://gitcode.com/gh_mirrors/ob/obsidian-git我们的 Obsidian Vault 涨到 2,347 篇笔记、1,832 次提交后obsidian-git 打开一篇 3,200 行的长笔记要等 1.2 秒才画出行作者栏。这篇记录我们如何用 3 个设置级手段把首次渲染压到 410ms、状态刷新降频 5 倍的完整过程全部改动只动 data.json。现象与根因1,240ms 到底花在哪三个先扛不住的操作进入今年下半年这个 Vault 出现三个可复现的卡顿数字都是实测长笔记首开3,200 行笔记打开后作者栏 1,240ms 才填上devtools 里用console.time计时写作时源码控制视图 2 分钟里刷新了 12 次每次状态查询约 400ms文件列表滚得一顿一顿自动提交间隔 1 分钟一天约 45 轮 commit-and-sync每轮 add、commit、pull、push 合计约 6s后台 git 进程长期挂着 8% CPU。热点定位时间花在子进程上我们先排除渲染层把作者文字全部隐藏后首开仍然要 1,180ms说明大头在 git 子进程。逐项测下来是三个热点行归属查询太贵。line author 的命令在 blame 参数组装处 拼装默认git blame --porcelain把跨所有提交追踪行移动打开后会追加-C -C -C40墙钟从 980ms 跳到 3,400ms。状态查询太密。每次文件变更都会触发 状态刷新链默认 7000ms 防抖对每秒 3 键的写作节奏仍然太频繁设置项说明 里官方也标注了慢机器上该关。提交节奏太勤。计时器逻辑 每轮串行执行 4 个 git 命令且所有任务走 串行队列一次慢 pull 会堵住后面排队的提交。插件本身的缓存其实不少行作者结果缓存 以HEAD 文件哈希 路径为键键定义命中后切回同一文件不重算视图层缓存 还缓存了 gutter marker 和自适应初始色。问题在于缓存命中的收益被昂贵的 miss 和高频刷新吃掉了处方就针对这两点。处方一blame 参数与空白忽略怎么改症状长笔记首开 1,240ms跨所有提交追踪打开后恶化到 3,400ms。根因缓存 miss 时要重跑一次完整查询-C -C的跨提交拷贝检测成本超线性40 字符的匹配阈值见 常量定义Vault 里大量列表重缩进、换行调整这类纯空白改动又不断让文件哈希变化、使缓存键失效。处方先在终端拿基线time git blame --porcelain -w -- 长笔记.md # 实测 980ms time git blame --porcelain -w -C -C -C40 -- 长笔记.md # 实测 3,400ms再改.obsidian/plugins/obsidian-git/data.json{ lineAuthor: { show: true, followMovement: inactive, // 默认值确有跨文件搬运动作再升 same-commit ignoreWhitespace: true, // 对应查询命令的 -w忽略纯空白变更 authorDisplay: initials // 缩写比全名省 gutter 宽度 } }改完在命令面板执行 Git: Toggle line author information 关一次再开清掉视图缓存。预期效果首开 980ms → 410ms实测3 次中位数同一文件二次打开走缓存只要 60ms。作者栏是异步填充的先画占位色条查询结果回来再写入打字全程不被阻塞如果只看年龄色条不看文字把authorDisplay设成 hide、coloringMaxAge设1y就是最省配置色条配置项说明见 行作者功能文档处方二源码控制视图刷新防抖怎么调症状2 分钟写作触发 12 次状态查询每次约 400ms文件列表滚动明显卡顿。根因刷新链是vault 变更事件 → 防抖 → status 查询 → 视图更新刷新防抖逻辑默认 7000ms 防抖仍太密状态栏显示变更文件数还会追加一次查询触发。处方{ refreshSourceControl: true, // 保留自动刷新只拉长防抖 refreshSourceControlTimer: 30000, // 7000 → 30000ms下限 500ms changedFilesInStatusBar: false // 状态栏计数也吃查询开销关掉 }预期效果状态查询 12 次/2min → 2 次/2min实测滚动卡顿消失。纯写作时段可以把refreshSourceControl彻底关掉查询只在手动命令后发生写作期间零 git 开销。处方三自动提交间隔与推送怎么拆开症状每天 45 轮 commit-and-sync每轮约 6s偶尔和手动提交排队后续操作多等 20s 以上。根因计时器管理 默认 commit 与 push 同频每轮都 pull push网络差时 pull 卡住串行队列 里排队的任务全部等待这是卡 20s的直接来源。处方{ autoSaveInterval: 30, // 1 → 30 分钟 autoBackupAfterFileChange: true, // 停笔 30 分钟后才提交 setLastSaveToLastCommit: true, // 手动提交后重置计时防重复提交 differentIntervalCommitAndPush: true, autoPushInterval: 60 // 推送单独放到 1 小时一次 }同时把大文件挡在仓库外插件对 GitHub 远端会拒绝提交 100MB 以上的文件大文件检查Vault 里的 PDF、扫描件建议进.gitignore或 Git LFS否则连add -A本身都会被拖慢。预期效果提交 45 次/日 → 18 次/日按我们 6 小时工作节奏预估后台 git CPU 从约 8% 降到约 3%30 分钟采样实测。历史视图也跟着受益历史查询 支持 maxCount 分页1,832 次提交的仓库翻页只取当前页差异在 diff 视图 里加载时不再排队等提交。验证调优前后 5 项指标对比测试环境macOS 14 / Apple M2Obsidian 1.5.xVault 2,347 篇笔记、1,832 次提交.git占 95MB。每项取 3 次中位数首次渲染在 devtools 控制台计时行归属命令墙钟用终端time命令测。指标调优前调优后优化增益作者栏首次渲染3,200 行笔记1,240ms410ms二次打开 60ms↓67%行归属命令墙钟关闭 -C -C 后3,400ms410ms↓88%状态查询频率2 分钟写作12 次2 次↓83%自动提交次数45 次/日18 次/日预估↓60%后台 git CPU30 分钟采样≈8%≈3%↓63%两点注意60ms 是同一文件二次打开的缓存命中值首次打开仍是 410ms提交次数的降幅是预估写作习惯不同差异会很大。常见坑与快速排障症状可能原因快速解决改了 data.json 作者栏没变化视图缓存未清命令面板 Git: Toggle line author information 关一次再开.gitignore 写了却不生效文件已被提交ignore 只对未跟踪文件有效git rm --cached 文件后再提交见 常见 issue自动提交卡住排队慢 pull 堵住串行队列看状态栏 gitAction恢复网络或重启 Obsidian 清 队列Cannot run git / ENOENTPATH 里找不到 git 可执行文件设置里填 Custom Git binary path参考 排障文档移动端没有作者栏line author 仅桌面端支持换桌面端使用【免费下载链接】obsidian-gitIntegrate Git version control with automatic commit-and-sync and other advanced features in Obsidian.md项目地址: https://gitcode.com/gh_mirrors/ob/obsidian-git创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
阅读完成 · 觉得有帮助?