Skip to content

Issue 5

clean edited this page Sep 16, 2026 · 2 revisions

Issue #5:[优化] 优先展示已登记仓库,异步刷新远程状态并区分加载失败与空列表

Issue #5 · PR #11 · 实现方案与验收记录

2026-09-16 从 Issue 迁入的需求与方案快照,保留原始验收勾选状态;当前进度以关联 Issue / PR 为准。实现细节、验收证据和未验证项见上方记录。

当前基线(2026-09-11)

  • 发布基线:v0.2.0,对应提交 9c260f6
  • 开发基线:development@83abc30devdevelopment;当前分支相对 tag 新增 3 个提交,见差异
  • 本项状态:已关闭 / TODO Done;PR #11 已合并(3709357)。实现与记录中的验证已完成,已在 development,尚未包含于 v0.2.0。

背景与问题

历史排查“查找 0.1.2 重装数据丢失原因”确认:当次已登记记录完整,并未被重装删除。首次 /api/repositories 请求约 30.009 秒超时,界面却显示“暂无已登记的仓库”;手动刷新约 5.57 秒后恢复,造成数据丢失的错觉。这些是一次排查中的观察值,不代表所有环境的性能基线。

发布基线 v0.2.0 仍将本地注册信息与远程 Git 状态绑定加载:后端读取 SQLite 后,逐个建立连接、查询状态,再返回整个列表。慢连接、离线主机或大型仓库会延迟列表展示,首次失败可能落入空列表提示。当前 development 已通过 PR #11 拆分加载并补齐错误反馈;以下保留原需求与已完成验收范围。

目标

优先展示已登记仓库,使用户能够辨认和打开已有工作区;远程状态按需刷新、逐项反馈。明确区分“确实没有仓库”“尚未加载”“加载失败”和“状态尚未更新”,减少把网络问题误判为数据丢失的情况。

需求与范围

  • 注册列表从本地数据库读取,返回过程不等待 SSH 或 git status。保留完整的仓库标识、所属连接、名称和路径,连接筛选继续在展示层处理。
  • 将分支、改动、领先/落后等远程状态独立刷新;优先当前仓库和可见内容,对后台刷新限制并发、设置超时,避免单个慢仓库拖累全部。
  • 每个仓库表达状态加载中、成功、失败及旧数据状态;未知状态不能显示为“干净”或“无分支”。刷新失败时保留上次有效数据,并显示更新时间或陈旧提示。
  • 列表首载失败展示错误与重试入口;刷新失败保留已有列表。重复点击刷新合并请求或取消旧请求,防止晚到响应覆盖新结果。
  • 保持扫描、添加、移除、筛选及工作区排序行为。此次优化不包含数据库迁移或重新登记仓库流程。

方案建议与代码线索

当前 development 的实现入口:

验收标准

  • 阻塞或禁用所有远程连接时,已登记列表仍可正常返回并展示,列表接口不调用远程状态查询。
  • 一个仓库状态查询超时,其他仓库仍能独立完成刷新并显示结果。
  • 首载失败展示明确错误和重试入口;只有成功取得注册列表后,才显示真实空列表或筛选无匹配提示。
  • 状态尚未取得、状态失败和过期缓存有可辨认反馈;刷新失败不清空已展示的注册信息。
  • 恢复连接后可重试成功;重复刷新、切换仓库及移除仓库时,过期响应不会污染当前数据或重新加入已删除条目。
  • 列表失败、远程状态失败或局部状态响应均不会清空工作区排序和折叠偏好。
  • 记录改动前后“注册列表可见时间”和“远程状态完成时间”,附脱敏结果及测试条件。

验证方案

使用隔离测试数据库与模拟 SSH/Git,覆盖空注册表、多连接、慢连接、拒绝连接、状态查询异常和网络恢复。为“返回注册表不触发 SSH”及单项失败隔离增加服务层验证;前端覆盖首次失败、已有数据刷新失败、筛选无匹配、连续刷新和请求乱序。用可重复的数据量对比首屏耗时,再执行一次桌面端冷启动与重试冒烟验证。已在 PR #11 中按上述方案完成隔离测试、模拟故障与性能对比,并完成 macOS arm64 桌面冷加载及重试冒烟;具体环境、原始数据和未验证的平台见下方实现进展。

风险与待确认

当前策略已落地:缓存 60 秒,总并发最多 3 个、后台最多 2 个;服务端超时 10 秒、客户端 12 秒,失败后手动重试。状态异步化存在短暂滞后,界面保留旧状态并显示时间或过期提示。后续仍需按真实网络与仓库规模复核体验,不能把模拟性能结果当作通用承诺。

workspaceStore 仍仅在成功取得完整、未筛选的注册表后对齐偏好,局部状态响应不得清理排序或折叠数据。

补充资料

关联历史排查标题:查找 0.1.2 重装数据丢失原因。当前代码链接统一固定到 development@83abc30;原验证记录中的基线 9c260f6、截图和测量数据保留其实际测试时间与环境,不改写为本次复测结果。

实现进展(2026-09-11)

  • 实现 PR:#11,已合并到 development3709357);Issue 已关闭,TODO 为 Done。改动晚于 v0.2.0,当前公开安装包尚未包含此优化。
  • 验收标准 7 项已验证完成;相关自动测试共 61 项通过,另完成浏览器验收与桌面两阶段冒烟。远程故障及性能使用隔离数据库和模拟 SSH/Git,桌面运行验证为 macOS arm64,未执行 Windows/Linux 桌面冒烟。
  • 已确定刷新策略:后台最多 2 个并发、总上限 3 个,当前工作区优先;缓存有效期 60 秒;服务端超时 10 秒、客户端 12 秒;失败不自动重试,保留旧状态并提供手动重试。
  • 24 个虚构仓库、3 次测量中位数:注册列表可见时间 2,004.00 → 211.10 ms,全部远程状态完成时间 1,766.83 → 924.86 ms。结果仅适用于记录中的模拟条件。
  • 验证记录、脱敏截图、原始数据及复现命令

Clone this wiki locally