移动应用 · 综合

离线工作:一个在电梯里不会坏掉的应用

一句话: 按照「没有网络」这个前提去设计应用,你会顺便得到一个在有网时也感觉很快的应用。

基本前提

移动网络不是一个开关,而是一条光谱:慢、断断续续、连着但没有吞吐。假定网络良好的应用,会恰好在用户最需要它的时候显示一个转不停的加载圈。

正确的做法:设备持有一份本地的真相来源,网络是一个后台同步过程。

三个机制

读缓存。加载过一次的内容立刻再次显示,带一个不显眼的「更新中」标记。

写队列。用户的操作先存在本地,有连接时再发送。界面立即显示结果。

冲突解决。两台设备改了同一条数据时怎么办。事先定好:最后写入者胜、按字段合并,或者询问用户。

用户需要看到什么

同步状态要安静但清晰,以及还有什么没发出去。完全隐藏状态,会在某样东西消失的那一刻制造不信任。

深入一层

在每条记录上保留服务端的版本号或更新时间戳,写入时回传以便检测冲突。没有它,两个并行的更新会静默地互相覆盖——这是最糟糕的数据丢失,因为没有人会收到错误。