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

48 lines
2.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 验收条件。