编辑器与只读渲染要分层
笔记编辑用 @milkdown/crepe(底层 ProseMirror)是对的;但对话回复、分享页这类只读场景不该复用它,三个硬伤:
- 实例开销:一个 Milkdown 实例 = 一个完整 ProseMirror 编辑器(schema/transaction、光标选区、输入法、undo 栈)。对话页几十条消息各起一个实例,内存与初始化耗时都会爆。轻量渲染器每条消息只是一次纯函数解析。
- 流式天敌:编辑器期望「拥有」文档状态,流式 delta 只能整篇
setContent重灌 → 全量重建文档树 + DOM diff → 闪烁卡顿。它本来就不是为 token 流设计的。 - 包体积:编辑器全家桶很大,只读场景不该背这个运行时。
分层方式:
| 场景 | 需求 | 用什么 |
|---|---|---|
| 笔记编辑 | 双向、可交互、光标/选区 | 完整编辑器 |
| 分享页展示 | 单向、只读 | 轻量渲染器 |
| 对话回复 | 单向、只读、高频流式 | 轻量渲染器(与分享页共用一条管线) |
判据:看这个场景要不要「写」和「光标」,而不是看它显示的是不是 markdown。 多个只读场景应共用同一条渲染管线,编辑器专心做编辑 —— 这也是「引擎不做建模器」的同一取向:各自干最擅长的事。
相关:引擎不做建模器、手搓编辑器核心逻辑到深处要评估换社区方案、兼容fallback会让内容重复渲染
相关
-
引擎不做建模器
-
兼容fallback会让内容重复渲染