普通聊天按需读取与增量同步
范围为应用登记的普通聊天。独立的只读历史入口继续走原来的上游读取链路。
- 已持久化的列表和详情从 SQLite 生成。旧版本或新建会话缺少摘要时,才补齐摘要;换分页参数不再使已知列表回源。
- 消息页按实际位置覆盖范围读取,本地只存了尾部也可以命中该页,不必先下载完整会话。新回合不清除已经保存的历史覆盖信息。
- 回复完成或实时事件出现缺口时,校对当前会话的详情及最新消息,每页 100 条,遇到已保存的稳定位置即停止。按消息 ID 和内容摘要更新,未变化的消息不重写。
- 同一会话合并并发同步。读取期间收到新事件时,旧结果不能覆盖新修订;同步提交后发送账号隔离的失效通知,客户端再按需读取。
- 已缓存的旧页不等待后台同步。最新页可以等待正在提交的尾部;同步失败仍返回已有本地内容。
- 普通页面刷新不绕过本地缓存。会话操作中的“强制刷新历史”才使用
X-Yaoyao-Cache: bypass,完整校对并替换历史。下载失败或分页期间消息总数变化时,不替换已有记录。
- 旧消息删除、重排等改变历史位置的情况保留本地内容,等待明确强制刷新,不把它当作普通尾部追加。
- 模型变化继续由实时事件和进入页面时的必要校验处理,取消每 3 秒无条件读取会话详情。
验证
- 1,000 条已缓存消息,20 次历史分页读取不请求上游。
- 新增回复只读取一页尾部;漏掉 130 条消息只补两页;原有消息不重新写入。
- 明确强制刷新才覆盖旧编辑和删除;失败时保留旧记录;并发完成事件提交后再通知客户端。
- 浏览器验证普通重载命中本地、强制刷新回源,以及只读历史和普通聊天的边界。
这些请求数来自隔离测试,并非对真实网络耗时的估计。