后台静默刷新缓存并在数据变化时提示用户优于强制等待
别名: stale-while-revalidate · 静默刷新 · 变化再提示
概念解释
先画缓存,不必把人扣在转圈上等校验。后台去问服务器,若没有变化,标记改成已确认,人甚至不必知道发生过一次请求。若有变化,再提示——轻量的「有更新」、列表里新来的一行、冲突时的说明——而不是整页换成等待、把正在读的字抽走。这条路径常被叫做 stale-while-revalidate:陈旧先用着,校验在背后,变化才出声。它优于「每次打开先等最新」,因为最新往往与刚才那份相同,等待是空的。
机制
强制等待假设每一次打开都必须在第一帧看到服务器此刻的字节。对很少变的对象,这个假设买到的新信息是零,付出去的是一段空白。静默刷新把「确认是否仍真」从呈现关键路径上拿掉:呈现走缓存,确认走后台。确认结果分叉。未变:世界与人正在读的一致,只需把时效标记收掉或改成「刚刚确认」。已变:人正在用的那份要被修正,修正若无声替换,正在读的句子、正在填的表、正在瞄的按钮会在眼下换主人——这比当初等一会儿更粗暴。提示把修正变成一次可接受的更新,而不是一次劫持。
提示的剂量跟变化的种类走。多了一行,可以插进列表并短暂指出。正在编辑的字段被远端改了,必须停下来说冲突,不能静默覆盖。剂量过大(每条字段闪一次)会把刷新本身变成噪声,人开始忽略提示,等于没提示。
边界
安全与时效关键的数据不应先画陈旧再静默——第四叶直接禁止这条路径当默认。人明确要最新(下拉刷新、打开对账单)时,等待是被请求的,静默反而藏了这次确认。后台刷新失败,应保留陈旧加标记加就近再试,不要因为刷新失败就把已画的内容抽成失败整页。正在输入的表单上,静默成功但无提示的字段替换会吞字,这类块要排除出自动替换。耗电和流量仍在:静默不是免费,频繁打开的页要节制校验频率。
怎么落地
- 打开允许陈旧的页:先画缓存,后台校验;未变则更新时效,已变则局部提示后替换,不要整页转圈。
- 正在编辑或焦点所在的字段,校验到变化时提示冲突,不要覆盖输入。
- 下拉刷新等显式「要最新」走等待最新,不走静默。
- 验证:打开一份稍后会在服务器被改的列表,人正在读。正确路径是列表先出现,随后一句「有更新」或新行插入,读的位置还在。若先转圈,或字在眼下无声换成另一版,这条就没优于强制等待。