dsh-carrick-optimize:啓動預熱 session 列表,縮短歷史側欄首屏等待

前言

在 DSH(DeepSeek Harness)裏打開 Web 界面時,歷史會話側欄往往要等第一次 session/list 返回後才能渲染。DSH 的實現會遍歷各項目與會話目錄,打開日誌頭、解壓並 stat 文件;資料中舉例約 1,200 個 session 時,單次調用大約需要一秒,瀏覽器會在這段時間內空等。

若不處理,每次冷啓動或首次拉列表都會重複這一掃描。下面介紹的 dsh-carrick-optimize 由維護者 Carrick-K7 發佈,歸類爲「記憶」相關插件,把 session 發現挪到進程啓動後預熱,並用 stale-while-revalidate 緩存結果,讓首屏歷史列表更快可用。

這是什麼

dsh-carrick-optimize 是一個體量較小的 DSH 插件(當前包版本 0.1.0,許可證 MIT)。它針對 ctx.sessionPersistence.list() 所代表的 session 列表發現路徑做優化:啓動後延遲預熱列表,請求命中緩存;同時在 session/created、session/disposed 時失效緩存,避免新會話被 TTL 拖慢。運行中會話的合併仍交給 sessionQuery,標題與 live session 保持原有 freshness。

插件通過 cordis.patch.yml 掛入 profile,patch 的是 DSH 內部服務;DSH 大版本升級後需要重新驗證是否仍兼容。

核心功能

資料中明確列出的行爲如下。

  1. 列表預熱與緩存:啓動後在可配置延遲後調用 ctx.sessionPersistence.list(),後續請求先走 stale-while-revalidate 緩存,後臺再校驗刷新。
  2. 事件驅動失效:監聽 session/created、session/disposed,即時作廢列表緩存,不必等到 listTtlMs 結束。
  3. 可選會話級預熱:可配置最近更新的 N 個 session,預寫入 session-query 觀察緩存;單日誌與總壓縮字節有上限,過大文件會跳過。
  4. 卸載清理:插件 unload 時恢復被 patch 的原方法並清除定時器;若目標服務不存在或已被 patch,插件保持 idle 並打 warning。

README 在 DSH 0.2.1-rc.3、801 個 session 上測得:首次 session/list 約 306–376ms 降到 47–94ms。該數字來自倉庫說明,環境與 session 規模不同會有差異。

不覆蓋的範圍(資料原文強調):任意「冷」會話仍可能需要完整 Zstandard 日誌解碼;分頁與 projection 仍依賴完整事件數組。插件 bundle 加載不受此插件影響。

安裝與啓用

面向 Web profile 的安裝命令以 README 爲準,安裝後需重啓 DSH。

dsh plugin --profile web add git+https://github.com/Carrick-K7/dsh-carrick-optimize.git#v0.1.0
# restart DSH

若使用本地打包產物:

dsh plugin --profile web add file:/path/to/dsh-carrick-optimize-0.1.0.tgz

安裝後,cordis.patch.yml 會向 profile 插入條目(示例):

- insert:
    - id: carrick-optimize
      name: dsh-carrick-optimize

插件以當前 DSH 進程權限運行。安裝前建議在 GitHub 閱讀源碼與 MIT 許可證,確認 patch 行爲可接受。

配置

在 profile patch 裏覆蓋 carrick-optimize 的 config 即可。README 示例:

- id: carrick-optimize
  config:
    listTtlMs: 60000
    prewarmList: true
    prewarmDelayMs: 500
    prewarmSessions: 2
配置項 默認值 含義
enabled true 關閉插件
listTtlMs 60000 後臺重新校驗前的緩存窗口(毫秒)
prewarmList true 啓動時預熱列表
prewarmDelayMs 500 啓動預熱前的延遲(毫秒)
prewarmSessions 2 預熱的最近 session 數量;0 表示關閉
prewarmMaxSessionBytes 24 MiB 超過此大小的單條日誌跳過預熱
prewarmTotalBytes 48 MiB 預熱階段壓縮字節總預算

典型用法無需改代碼:裝好插件、按需調上述字段,重啓 DSH 後打開 Web 歷史側欄即可感受首屏列表延遲變化。若 session 體量很大,可先保持默認,再按機器負載調整 prewarmSessions 與字節上限。

適用場景與注意

適合:本地或服務器上 session 數量多、頻繁用 Web 歷史列表瀏覽與切換的用戶;目標 DSH 版本與插件聲明一致(資料寫明面向 DSH 0.2.1-rc.3,Cordis 4)。

注意:

  • 兼容性綁定內部 API ctx.sessionPersistence.list;DSH 升級後應跑一遍歷史列表與新建/銷燬 session,並查看日誌是否有 idle / warning。
  • 預熱只加速列表與已預熱 session 的首次打開,不能替代完整日誌解碼成本。
  • 社區目錄 skillhub.cn 插件頁 與 GitHub 倉庫由社區維護,與 DeepSeek / 幻方無官方從屬關係;安裝來源以你信任的倉庫與 tag 爲準。

結尾

dsh-carrick-optimize 把耗時的 session 目錄掃描前移到啓動階段,並用緩存與事件失效平衡 freshness 與首屏速度。若你主要痛點是 Web 歷史側欄「第一次打開要等 list」,可以按 README 安裝 v0.1.0 並微調配置。

  • 目錄頁:https://www.skillhub.cn/plugins/Carrick-K7/dsh-carrick-optimize
  • 源碼與文檔:https://github.com/Carrick-K7/dsh-carrick-optimize
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜