编辑即时反馈与落盘延迟分离
为什么每字落盘不行
一次保存不是轻量 state 更新,链路是:
读当前 vault 文件 → atomic 写 .md → 再读回完整 note → 对正文分词 → 更新 SQLite FTS 搜索索引
每个字符都调后端,在长笔记、中文输入、连续输入时会明显增加 IO 和索引压力,也更容易制造写入乱序 race(即 延迟保存要捕获创建时的实体 那类问题)。
拆解表
| 关注点 | 做法 |
|---|---|
| 用户感知 | 内存立即更新,UI 立刻反映 |
| 持久化 | debounce 300-500ms |
| 边界安全 | 切换 / blur / 卸载立即 flush |
| 搜索索引 | 跟落盘节奏走,不跟按键走 |
判断依据
要改的是「前端感知立即保存」,不是「每字同步写文件 + 建索引」。当前 1 秒的主要问题不是数据丢失,而是体感慢 + 切换边界风险——所以优化方向是「内存 immediate + 落盘 300-500ms」,而不是取消 debounce。
相关
- 编辑器显示不能脱离真实光标状态 —— 同源:编辑器里「界面显示」与「真实状态」是两件事,不能互相替代
- 过期响应不能覆盖当前编辑内容