Files
mnote/bugs/05-editor-mainline/done/5-43-large-json-resource-tab-freeze-v1.md
T

2.4 KiB
Raw Blame History

5-43 大 JSON 资源 tab 打开后卡死且无法关闭

状态

  • 状态:done
  • owner05-editor-mainline
  • 发现时间:2026-06-04
  • 修复时间:2026-06-04

现象

在 local-folder 文件树中打开 OCR sidecar 的 source-map JSON,例如:

  • /mnt/Data1T/research/DHA_cosmetics/literature/SCCS_1612_19_DHA.ocr/SCCS_1612_19_DHA.pdf.source-map.json

页面会把 JSON 当作可编辑 code 资源加载进 Tiptap resource tab。大 JSON 打开后主线程明显卡顿,标签页关闭按钮无响应或被资源编辑 session 的关闭保护阻止;其它普通资源 tab 仍可关闭。

根因

document-resource-tab-runtime.js.json 归类为 code,并且 markdown/text/code 统一走 openTiptapResourceTab。这会为 JSON 创建完整 Tiptap 编辑 session、序列化大文档、挂本地文件事件 channel,并把 code 资源纳入 dirty close guard。

OCR source-map JSON 是机器生成的只读索引文件,不适合作为页面编辑器文档打开;大文件走 Tiptap 会放大渲染和关闭保护成本。

修复

  • code 资源不再声明为 editable。
  • .json 等 code 资源改走轻量只读 <pre><code> 预览,不创建 Tiptap editor session。
  • 只读预览显示文件大小,超过预览上限时截断提示。
  • Markdown 和普通 text resource tab 仍保留原可编辑 Tiptap 路径。

验证

  • node --check rust/crates/mnote-web/browser/document-resource-tab-runtime.js
  • cargo build -p mnote-web --manifest-path rust/Cargo.toml
  • 临时启动 127.0.0.1:3023 后用 Playwright 打开真实页面:
    • rootUri=file:///mnt/Data1T/research/DHA_cosmetics
    • 页面:literature/dha_computational_modeling_literature.md
    • 资源:literature/SCCS_1612_19_DHA.ocr/SCCS_1612_19_DHA.pdf.source-map.json
  • 浏览器验证结果:
    • resource tab 成功打开只读 code preview。
    • 当前 panel 不存在 mnote-leptos-tiptap-island-editor-root,证明没有挂 Tiptap 编辑器。
    • 预览加载 970708 字符,meta 显示 只读预览 · 971,098 bytes
    • 点击 tab close 后 openResourcePanels=0,主页面 tab 恢复选中。

备注

task505-resource-tab-watch-contract-smoke.js 在本次临时 standalone 服务上未通过,失败点是 Markdown resource 外部文件变更 watcher 未把写盘更新同步回 resource editor;该路径与本次 JSON 只读预览不同,未作为本 bug 验收条件。