I2.12.2stale content needs a freshness mark设计
陈旧内容需要有可辨识的时效标记而非等同于最新数据
别名: 时效标记 · 不是最新 · stale indicator
概念解释
缓存画出来的那一帧,若看起来和刚从服务器来的一帧没有区别,人会把旧命题当成现在的命题。时效标记把「这份是什么时候的」写进界面:相对时间、绝对时间、或一句「可能不是最新」。陈旧不是偷偷用旧数据,是公开地用旧数据。没有标记,加速那些毫秒买来的是一次静默的假最新。
机制
人对屏幕上未加注的陈述有一条默认:这是当前世界。新闻标题、库存数、未读角标,都会按这条默认进决策。缓存打破了默认的生成条件(未经现在这趟网络确认),却常常不打破默认的外观。标记的工作是改外观,让默认换成「这是某时刻的世界」。时刻要可辨识:模糊的灰点、只有开发才懂的图标,等于没标。可辨识也不等于吓人——「2 分钟前」和「数据可能过期」粒度不同,前者让人校准还值不值得当现在用,后者只制造焦虑。
标记还要跟内容走,不能只在很远的设置页。人看着的是这一条库存、这一封邮件,时效应落在这一条旁边。整页一个角标,局部已经刷新的块和仍旧的块会混成一种时效,标记自己变得不诚实。
边界
静态、发布后不再改的对象标时效是噪声。标记的对象是「会变且人可能当现在用」的那些。离线时「最后同步于」既是时效也是离线状态,可以合一,但不要因此在在线却用缓存时省略标记。相对时间自己会变旧(「刚刚」停在屏幕上十分钟),标记需要刷新或改用绝对时间,否则标记也陈旧。安全关键数据不该落到「标一下就能当现在用」——那是下一叶之后的第四叶,标记救不了不该默认陈旧的数据。
怎么落地
- 凡是缓存先画、人可能当现在用的数字和状态,在其旁边给出可读的时刻或「未确认最新」。
- 局部刷新成功的块把标记拿掉或改成新时刻;仍旧的块保留,不要整页共用一个已过时的标。
- 相对时间超过一档就要更新显示,避免「刚刚」冻住。
- 验证:用一份明显过期的缓存打开库存或未读。若界面看起来就是一张普通的「现在」的页,时效没被标出来。标出来之后问人「你能不能指出这份是什么时候的」——指不出,标记不可辨识。