I2.12.2stale content needs a freshness mark设计

陈旧内容需要有可辨识的时效标记而非等同于最新数据

别名: 时效标记 · 不是最新 · stale indicator

概念解释

缓存画出来的那一帧,若看起来和刚从服务器来的一帧没有区别,人会把旧命题当成现在的命题。时效标记把「这份是什么时候的」写进界面:相对时间、绝对时间、或一句「可能不是最新」。陈旧不是偷偷用旧数据,是公开地用旧数据。没有标记,加速那些毫秒买来的是一次静默的假最新。

机制

人对屏幕上未加注的陈述有一条默认:这是当前世界。新闻标题、库存数、未读角标,都会按这条默认进决策。缓存打破了默认的生成条件(未经现在这趟网络确认),却常常不打破默认的外观。标记的工作是改外观,让默认换成「这是某时刻的世界」。时刻要可辨识:模糊的灰点、只有开发才懂的图标,等于没标。可辨识也不等于吓人——「2 分钟前」和「数据可能过期」粒度不同,前者让人校准还值不值得当现在用,后者只制造焦虑。

标记还要跟内容走,不能只在很远的设置页。人看着的是这一条库存、这一封邮件,时效应落在这一条旁边。整页一个角标,局部已经刷新的块和仍旧的块会混成一种时效,标记自己变得不诚实。

边界

静态、发布后不再改的对象标时效是噪声。标记的对象是「会变且人可能当现在用」的那些。离线时「最后同步于」既是时效也是离线状态,可以合一,但不要因此在在线却用缓存时省略标记。相对时间自己会变旧(「刚刚」停在屏幕上十分钟),标记需要刷新或改用绝对时间,否则标记也陈旧。安全关键数据不该落到「标一下就能当现在用」——那是下一叶之后的第四叶,标记救不了不该默认陈旧的数据。

怎么落地

  • 凡是缓存先画、人可能当现在用的数字和状态,在其旁边给出可读的时刻或「未确认最新」。
  • 局部刷新成功的块把标记拿掉或改成新时刻;仍旧的块保留,不要整页共用一个已过时的标。
  • 相对时间超过一档就要更新显示,避免「刚刚」冻住。
  • 验证:用一份明显过期的缓存打开库存或未读。若界面看起来就是一张普通的「现在」的页,时效没被标出来。标出来之后问人「你能不能指出这份是什么时候的」——指不出,标记不可辨识。

延伸

  • 同组I2.12.1 缓存内容能加快呈现速度但存在与服务器状态不一致的风险 · I2.12.3 后台静默刷新缓存并在数据变化时提示用户优于强制等待 · I2.12.4 涉及安全或时效关键的数据不应使用陈旧缓存作为默认呈现
  • 相邻I4.07 实时性等级与一致性预期 · I4.04 时间显示格式 · I3.03 离线状态
  • 站内检索freshness marker · stale indicator · as-of timestamp

同组卡片

快捷操作

分享

分享当前页面

ios_share

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