fix(home): prefetch the warm snapshot from secondary pages so the first 新建对话 skips the loading ring (BUG-1104)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01N4f2nya58RoRu4yEmJgRGE
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
b19d0bbf36
commit
fee9ddc8a1
@@ -14888,3 +14888,19 @@
|
||||
- 相关记录:BUG-1094
|
||||
- 复发自:BUG-1094 的遗漏
|
||||
- 修复版本:分支 `codex/surface-feedback-20260929`
|
||||
|
||||
## BUG-1104 | 先打开星盘 / 报告等页面的标签,第一次点「新建对话」仍要等两三秒
|
||||
|
||||
- 状态:resolved(代码 + 生命周期回归测试;真机浏览器耗时未测)
|
||||
- 首次发现 / 最近更新:2026-09-29 / 2026-09-29
|
||||
- 影响面:`frontend/src/lib/session-list-context.tsx`(新增后台预取)、`frontend/src/lib/home-warm-prefetch.ts`(新)、`frontend/src/lib/home-cloud-sync.ts::fetchRectificationEntrySummary`(从首页 effect 抽出,冷启动与预取共用)、`frontend/src/lib/new-chat-timing.ts`(新)、`frontend/src/components/app-sidebar.tsx`。
|
||||
- 用户现象:在星盘、星历、我的报告、星盘档案等页面点侧栏「新建对话」,要等两三秒才进首页(整段加载屏)。
|
||||
- 触发条件:这个标签页里首页还没有完整冷启动过——刷新了次级页、从链接直接打开次级页,再点「新建对话」。首页已经冷启动过的标签不复现(BUG-1040 的暖快照生效)。
|
||||
- 根因:暖快照只由首页自己在冷启动成功后写入(`src/app/(app)/page.tsx` 写快照的 effect);`home-warm-start.ts::resolveHomeWarmStart` 读到 `isCompleteHomeWarmSnapshot` 为假(没有模型目录 / 入口摘要未 settle)就回冷路径。所以「先落在次级页」的标签第一次回首页必然整段冷启动。`/` 路由的代码块本来就由 Next `Link` 预取,不是原因。
|
||||
- 修复:`SessionListProvider` 在列表 settled、已登录、资料完整、首页未注册、地址不是 `/` 时,于空闲时刻用冷启动同一组客户端函数(`fetchModelCatalog`、`fetchRectificationEntrySummary`)只读预取,并经同一个 `writeHomeWarmSnapshot` 写入(`listBoot: null`,游标以 provider 自己的 boot 为准)。首页挂载 / 退出 / 换账户 / 列表重载即 abort,写入前再确认仍是当前;目录失败不写,摘要失败按冷启动同样 settle 为默认卡。另加本地 Performance 打点 `jyotisha:new-chat (warm|cold)`。
|
||||
- 验证:`frontend/tests/home-warm-return-lifecycle.test.tsx` 新增 3 条(真实 Home + 侧栏 + provider):标签先开 `/chart`、`/reports`,预取完成后「新建对话」首帧无加载屏且在任何请求发出前就绪,预取只发 2 个 GET;预取失败时不留快照、照旧冷启动。去掉预取调用后两条暖路径用例超时失败(复现原问题)。`frontend/tests/home-warm-prefetch.test.ts` 6 条覆盖取消、已完整不重取、失败、空目录、单飞与账户隔离。
|
||||
- 防复发:新的首页冷启动必需件(`isCompleteHomeWarmSnapshot` 条件)必须同时加进 `home-warm-prefetch.ts`,否则预取会写出一个永远不完整、被忽略的快照——生命周期用例会因此超时报警。
|
||||
- 未验证:真机浏览器上的实际秒数(无登录态与 Chrome);部署后可在 DevTools Performance 里看 `jyotisha:new-chat` 的测量值。
|
||||
- 相关记录:BUG-1040、BUG-1052
|
||||
- 复发自:无(BUG-1040 的覆盖缺口)
|
||||
- 修复版本:分支 `codex/new-chat-prewarm-20260929`
|
||||
|
||||
Reference in New Issue
Block a user