Skip to content

perf(sessions): 缓存会话索引并按页读取详情 - #2511

Open
nk33-dev wants to merge 1 commit into
BigPizzaV3:mainfrom
nk33-dev:codex/session-paging
Open

nk33-dev wants to merge 1 commit into
BigPizzaV3:mainfrom
nk33-dev:codex/session-paging

Conversation

@nk33-dev

Copy link
Copy Markdown

问题

本地会话列表每次翻页都会枚举全部 ID,再从每个数据库读取 offset + limit + 1 条完整记录,合并去重后才截取本页。历史较多时,深分页反复读取前面的标题和路径;查询也直接占用管理器命令线程。

改动

  • 在数据层缓存 ID、更新时间和来源,翻页只解码本页详情;跨库同 ID 保留较新记录,时间相同保留候选库顺序。
  • 列表、索引与详情共用字段映射和子会话过滤,保留 offset、limit、hasMore、totalCount 接口。
  • 检查数据库及 WAL/SHM 文件信息与头部,缓存最多复用 30 秒;短读事务和连接在返回前释放。
  • Tauri 查询移至 spawn_blocking。单库失败返回错误及健康库结果,不把旧缓存当成成功结果。

首次读取及缓存失效仍需建立轻量索引,内存随会话数增长。多个数据库没有共同事务快照,外部写入期间不保证多次翻页冻结。此 PR 不改会话删除、供应商同步或列表界面。

验证

基于上游 45f1c151,Windows 本地隔离 worktree:

  • cargo test -p codex-plus-data --locked --offline --no-fail-fast:254 passed,2 项既有 ignored。
  • cargo test -p codex-plus-manager --lib local_sessions --locked --offline:3 passed。
  • npm test:548 passed,1 项既有 skipped。Git Bash 加入当前进程 PATH 后通过。
  • npm run check、npm run vite:build、git diff --check HEAD 通过。
  • 新增回归覆盖深分页、跨库去重、重复 automation 行、WAL 提交及复用、快照期间提交、数据库替换、缓存期限、部分读取失败和文件句柄释放。
  • cargo fmt --all --check 被上游既有格式差异阻断,本 PR 保持相关文件原有风格。

没有进行真实用户数据库上的性能计时、实际桌面启动或 macOS/Linux 原生运行验证。自动测试使用临时数据库,未修改正在使用的会话数据。

@BigPizzaV3

Copy link
Copy Markdown
Owner

当前 PR 没有任何可用的 CI check。请补跑 Windows artifacts 和 macOS DMG CI 后再继续审核。该改动涉及 SQLite WAL、会话索引缓存、数据库替换和分页一致性,建议至少覆盖这些路径的回归测试。

@nk33-dev

Copy link
Copy Markdown
Author

已按要求对当前 head 09627fe1 在 fork 中手动运行同一份 PR build artifacts workflow:

本次全量测试同时覆盖了 SQLite WAL 提交/截断/复用、索引缓存复用、同尺寸同时间戳数据库替换、并发快照,以及去重后的深分页一致性。上游自动 pull_request run 仍处于 fork 审批等待状态,上述链接是当前 head 的手动 dispatch 结果。

@nk33-dev
nk33-dev force-pushed the codex/session-paging branch from 09627fe to 650169a Compare October 14, 2026 01:36
@nk33-dev

nk33-dev commented Oct 14, 2026 •

Copy link
Copy Markdown
Author

已将当前 PR 迁移到 Codex++ 1.8.0 最新 main f6092f29,当前 head 为 650169aa,GitHub 已重新计算为可合并,无文件冲突。

会话分页与 SQLite WAL、索引缓存、数据库替换回归通过。

上游自动 workflow 仍需维护者批准;以上是同一 workflow 对当前 head 的手动 dispatch 结果。

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants