Replies: 1 comment
|
已修。@ 补全的候选列表不再逐键解压会话日志取标题:
获取修复: 更新到最新版 (npm latest=0.1.5-rc.1) 或拉取 master 重建后重测。 |
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
在 Web GUI 输入框里输入
@,触发菜单显示 "Loading…" 持续 4–5 秒才出现候选,而且每次击键都重新来一遍。文件搜索这半边很快,会话搜索这半边很慢。环境
dsh web,默认 web-app 组合,Windows)实测数据(对运行中的宿主直接探测
POST /api/<endpoint>):fileReferences/listsessionReferenceResolver/candidatessession.list(侧边栏,同一宿主)根因
SessionReferenceResolver.listCandidates(位于packages/context/session-reference/src/index.ts)通过ctx.sessionQuery.readTitleSnapshots(...)解析候选标签,该调用会解压每个候选会话的完整 zstd 日志来提取标题——每次调用最多解压candidateLimit(默认 50)个,既没有缓存也没有防抖。而侧边栏的session.list从投影缓存(dsh-session-projection-cache维护的session_projcache.json)以极低成本拿到同样的标题。也就是说,这条昂贵的路径在重算宿主早已算好的数据。客户端还有两个加重因素:
ui-reference的candidates()用一个Promise.all同时等文件 RPC 和会话 RPC,快的文件结果被慢的会话结果拖住一起出不来;影响
@菜单实际上连文件引用也没法用了——整个菜单要保持pending状态直到两个来源都返回(每次击键 4–5 秒)。此外这条链路上没有任何客户端超时,请求一旦丢失,菜单会永远停在 "Loading…"(在宿主重启竞态后实际观察到;另外dsh web重启时旧进程占着 3080 端口会报 EADDRINUSE,也和这个现象相关)。建议的修复方案(按影响排序)
listCandidates的标签来源应换成侧边栏同款的投影缓存/session-list 路径(session.list证明全部会话带标题约 200 ms 可达)。仅这一项就应把端点从约 4.8 秒降到 500 ms 以内。session/title事件失效,重复击键就是零成本。ui-reference(或 input-trigger 控制器)对候选查询加约 150–200 ms 防抖,让一连串击键只触发一轮 RPC 而不是 N 轮。ui-referencecandidates()里的Promise.all,让文件组独立返回——菜单框架本来就支持分组各自的ready状态,文件结果立即显示,会话组自己慢慢解析。AbortSignal.timeout(3000)),请求丢失时该组按失败处理(菜单自动关闭),而不是永远挂在 "Loading…" 上。第 1–2 项治延迟,第 3–4 项治体感,第 5 项治挂死。
目前的临时规避
禁用该插件(
~/.dsh/cordis.patch.yml里- id: session-reference / disabled: true)后@菜单毫秒级响应,代价是失去@session功能。若必须保留功能,把candidateLimit调小(比如 10)可按比例缩短延迟。草稿里的所有数字都来自今天在你机器上的真实探测。需要我再补一版英文对照(或纯英文)的,随时说。
All reactions