I2.12.3silent refresh then hint设计

后台静默刷新缓存并在数据变化时提示用户优于强制等待

别名: stale-while-revalidate · 静默刷新 · 变化再提示

概念解释

先画缓存,不必把人扣在转圈上等校验。后台去问服务器,若没有变化,标记改成已确认,人甚至不必知道发生过一次请求。若有变化,再提示——轻量的「有更新」、列表里新来的一行、冲突时的说明——而不是整页换成等待、把正在读的字抽走。这条路径常被叫做 stale-while-revalidate:陈旧先用着,校验在背后,变化才出声。它优于「每次打开先等最新」,因为最新往往与刚才那份相同,等待是空的。

机制

强制等待假设每一次打开都必须在第一帧看到服务器此刻的字节。对很少变的对象,这个假设买到的新信息是零,付出去的是一段空白。静默刷新把「确认是否仍真」从呈现关键路径上拿掉:呈现走缓存,确认走后台。确认结果分叉。未变:世界与人正在读的一致,只需把时效标记收掉或改成「刚刚确认」。已变:人正在用的那份要被修正,修正若无声替换,正在读的句子、正在填的表、正在瞄的按钮会在眼下换主人——这比当初等一会儿更粗暴。提示把修正变成一次可接受的更新,而不是一次劫持。

提示的剂量跟变化的种类走。多了一行,可以插进列表并短暂指出。正在编辑的字段被远端改了,必须停下来说冲突,不能静默覆盖。剂量过大(每条字段闪一次)会把刷新本身变成噪声,人开始忽略提示,等于没提示。

边界

安全与时效关键的数据不应先画陈旧再静默——第四叶直接禁止这条路径当默认。人明确要最新(下拉刷新、打开对账单)时,等待是被请求的,静默反而藏了这次确认。后台刷新失败,应保留陈旧加标记加就近再试,不要因为刷新失败就把已画的内容抽成失败整页。正在输入的表单上,静默成功但无提示的字段替换会吞字,这类块要排除出自动替换。耗电和流量仍在:静默不是免费,频繁打开的页要节制校验频率。

怎么落地

  • 打开允许陈旧的页:先画缓存,后台校验;未变则更新时效,已变则局部提示后替换,不要整页转圈。
  • 正在编辑或焦点所在的字段,校验到变化时提示冲突,不要覆盖输入。
  • 下拉刷新等显式「要最新」走等待最新,不走静默。
  • 验证:打开一份稍后会在服务器被改的列表,人正在读。正确路径是列表先出现,随后一句「有更新」或新行插入,读的位置还在。若先转圈,或字在眼下无声换成另一版,这条就没优于强制等待。

延伸

  • 同组I2.12.1 缓存内容能加快呈现速度但存在与服务器状态不一致的风险 · I2.12.2 陈旧内容需要有可辨识的时效标记而非等同于最新数据 · I2.12.4 涉及安全或时效关键的数据不应使用陈旧缓存作为默认呈现
  • 相邻I2.07 感知性能 · I3.04 同步冲突 · I4.07 实时性等级与一致性预期
  • 站内检索stale-while-revalidate · silent refresh · update available hint

同组卡片

快捷操作

分享

分享当前页面

ios_share

https://hci.top/zh/handbook/I2.12.3