十月补记:本文于 2026 年 10 月 25 日整理并首次发布,页面日期用于归档对应时期的实践;后续修整一并写入。产品开放范围以文中链接的公开说明为准。

用手机拍下一道日语题,回到电脑前接着追问,是我做日语随记与陪练同步时很想保留的场景。

但“资料能同步过去”和“同步时依然好用”,中间还有一段路。一次很小的编辑,如果牵动整份资料重新编码、重新写盘,界面就可能跟着等待。照片一多,这种差别会更明显。

这次整理里,我把注意力从“网络有没有通”往前挪了一步:每次变化,手机究竟在本地重做了多少工作?

01 / 一个小编辑,可能造成两种写入
一个小编辑,可能造成两种写入 保存方式示意,卡片大小不代表实测体积或性能比例。 整库保存 一条改动 整份资料再处理 增量保存 一条改动 先记录变化部分
保存方式示意,卡片大小不代表实测体积或性能比例。

改了一条笔记,为什么要搬整本书#

最初把资料整体保存,很容易理解:读出来是一份完整状态,写回去也是一份完整状态。数据少时,这种做法也很直接。

问题出在频率和体积同时增长。改一句说明、更新一次同步位置,都可能让没有变化的照片和旧笔记一起被重新处理。用户做的是一个小动作,系统做的却是一场大搬家。

如果这段工作还占着负责界面响应的主线程,按钮、输入和滚动就会受到影响。于是用户以为“同步网络很慢”,真正的等待却可能发生在发出请求之前。

我把小变化和完整状态分开保存#

可以把完整状态想成一本整理好的账本,把之后的变化想成按顺序追加的小记录。平时只记录变了什么,到合适时机再把这些变化归并成新的完整状态。

这样能减少每次都处理全量资料的机会。编码、计算差异和写盘也放到后台有序执行,让界面尽快继续响应。

但只说“换到后台”还不够。同一条资料的新旧修改,仍要按正确顺序保存;磁盘写不进去时,不能假装已经安全落地。后台工作只是改变执行位置,没有自动解决可靠性。

02 / 把保存与恢复一起考虑
把保存与恢复一起考虑 箭头表示一种处理思路;真实手机的响应性与恢复仍需对应设备验证。 先保留当前改动 确认本地持久化结果 后台按顺序处理 旧响应不盖掉新编辑 合并成完整状态 退出后仍能可靠接续
箭头表示一种处理思路;真实手机的响应性与恢复仍需对应设备验证。

网络回了旧结果,也不能盖掉新编辑#

用一个自编例子说明:手机把笔记里的“车站”改成“駅”,请求发出后,我又补了一条例句。几秒后,前一个请求的响应才回来。

此时不能因为服务器回了成功,就把本地整条笔记还原成发请求时的旧样子。请求期间新增的例句,仍然属于用户当前的编辑。

同样,响应丢失之后重试,要能认出这是同一项修改,而不是再新增一份。切换账号后,旧会话迟到的结果也不能被写进新账号。这些问题都需要和本地保存一起考虑。

变快之后,怎样确认没有丢东西#

我会把验证拆成两组。第一组看响应性:改动了几条、写了多少、界面是否被阻塞。第二组看恢复:写入中退出、响应丢失后重开、磁盘失败、账号切换,以及损坏资料能否保留并提示。

性能可以先用合成照片和虚构笔记比较,不能为了测卡顿上传真实学习内容。真正手机上的内存、滚动和后台行为,还要再做设备验证;电脑上的计时不能直接代替。

如果改了保存方式,旧版程序能否读取也要提前说明。需要恢复时保留完整资料,不建议用户靠手工删除内部文件来让同步暂时启动。

目前公开说明里的同步范围,是单独开启后的题目照片、普通提问和笔记。朗读录音、学习板和课程进度并不因此全部互通,双端体验也仍有用户设备验收要完成。把卡顿问题解决好,不等于这些范围可以一起扩大。