父任务
#467 macOS 交互帧预算:声明式 UI 热路径与可调节表面
依赖
不变量
连续输入时,编辑器不得在每个按键路径上执行 textView.string 的全文同步,也不得因为已经 dirty 的文档再次触发 Workbench 全树刷新。
范围
- 重构
textDidChange 到文档模型/LSP/保存层之间的同步载荷。
- 使用增量编辑描述、合帧缓冲或等价机制,保留撤销、保存、外部变更和冲突语义。
- 保证 Cmd+S、自动保存和切换文档前会刷新最新编辑内容。
- 为输入路径增加回归测试或源码门禁,禁止恢复全文同步。
明确不改
- 不在本 PR 同时重写语法高亮。
- 不在本 PR 修改 LSP 协议命令名或 C ABI。
- 不通过关闭高亮、LSP 或 Git 装饰来获得假性能。
验收
- 500 KiB 文件连续输入时,全文同步造成的 >50ms 主线程任务为 0。
- 已 dirty 文档的按键不会调用
scheduleObjectWillChangeRelay。
- 文档保存、撤销、重做和外部修改冲突测试通过。
父任务
#467 macOS 交互帧预算:声明式 UI 热路径与可调节表面
依赖
不变量
连续输入时,编辑器不得在每个按键路径上执行
textView.string的全文同步,也不得因为已经 dirty 的文档再次触发 Workbench 全树刷新。范围
textDidChange到文档模型/LSP/保存层之间的同步载荷。明确不改
验收
scheduleObjectWillChangeRelay。