编辑即时反馈与落盘延迟分离

**不要为了「保存及时」改成每个字符都落盘。** 正确拆法是:**内存立即更新**(UI / 切换 / 当前状态马上最新),**落盘仍 debounce**(1000ms → 300-500ms),**切笔记 / blur / 卸载时立即 flush**。

为什么每字落盘不行

一次保存不是轻量 state 更新,链路是:

读当前 vault 文件 → atomic 写 .md → 再读回完整 note → 对正文分词 → 更新 SQLite FTS 搜索索引

每个字符都调后端,在长笔记、中文输入、连续输入时会明显增加 IO 和索引压力,也更容易制造写入乱序 race(即 延迟保存要捕获创建时的实体 那类问题)。

拆解表

关注点做法
用户感知内存立即更新,UI 立刻反映
持久化debounce 300-500ms
边界安全切换 / blur / 卸载立即 flush
搜索索引跟落盘节奏走,不跟按键走

判断依据

要改的是「前端感知立即保存」,不是「每字同步写文件 + 建索引」。当前 1 秒的主要问题不是数据丢失,而是体感慢 + 切换边界风险——所以优化方向是「内存 immediate + 落盘 300-500ms」,而不是取消 debounce。

相关