E6.14.2offline action queue设计

断线期间的操作应明确说明是否会排队重试

别名: 离线队列 · pending sync · 断线仍可点

概念解释

离线时有的动作可以先收下、等网络回来再发,有的动作现在点下去只会失败。是否排队必须在点下去之前说清。用户把「离线仍能写」理解成「已经交给服务器」时,关掉电脑就等于丢稿;把「现在不能发」理解成「写了也白写」时,又不敢用本地草稿。排队不是实现细节,是这次点击的语义:点的是「现在发送」还是「登记一条待发送」。

机制

发送和登记是两种承诺。发送失败,世界没变;登记成功,世界在本地变了,远程还没有。界面若用同一个按下态覆盖两种承诺,用户只能拿在线时的经验去套:按钮跳成「已完成」,就是远端也完成了。离线队列打破了这套经验,所以要显式改写按钮和回执:「将在恢复连接后发送」「已保存到本机,未同步」。说清排队,人才能决定要不要现在改很多条、要不要等有网再动手、关掉应用安不安全。不说清,队列再可靠也被当成已经同步,或可靠的本地能力被当成不可用。

边界

有的动作无法排队(付款、一次性验证码、需要服务器此刻锁的库存),应在离线时直接不可点,不要收进一条永远发不出去的队列假装在排队。队列有容量和冲突规则,提示里要能看见待发送条数,满了要说满了,而不是静默丢。登记之后用户立即再改同一对象,队列里应是最新稿还是两次都发,必须有规则,并且在「待同步」态上可查。加密或敏感内容不该在这台设备上排队,应拒绝登记并说明原因。

怎么落地

  • 每个离线可点的动作标明承诺:立即失败、登记待发送、或仅本地永久。
  • 待发送用对象上的「未同步」标记加可打开的队列,不要只在点的瞬间闪一句。
  • 不能排队的动作离线时禁用,文案说「需要网络」,不要收进队列。
  • 验证:离线写一条,问「现在关掉应用,这条还在吗、对面看得到吗」。两个答案若含糊,排队语义就没交代。

延伸

  • 同组E6.14.1 离线状态需要在操作前而非提交失败后提示 · E6.14.3 恢复连接后应主动提示并同步离线期间的变更 · E6.14.4 长期离线可用性取决于本地数据的完整程度
  • 相邻E6.13 操作结果的内联呈现 · E6.09 确定与不确定进度 · E6.10 错误页与降级页
  • 站内检索offline queue · pending sync · outbox

同组卡片

快捷操作

分享

分享当前页面

ios_share

https://hci.top/zh/handbook/E6.14.2