I2.04.3wrong prefetch yields nothing设计

预取错误会浪费资源且无收益

别名: 预取未命中 · 赌错下一跳 · prefetch miss

概念解释

预取是赌注。赌错——人去了别的地方、预测的对象已过期、取到的是错版本——流量和电量已经花了,下一跳的等待却一点没少。这叫未命中(miss):负项照付,正项为零。错误不是「稍微慢一点」,是这笔预取从账本上删除。继续用同一条规则去赌,只会稳定地制造无收益的开销。

机制

命中需要两头同时对:对象对,时机对。对象错:悬停的是开小差,真正要点的是旁边那条;列表第一项的全局概率套在一个专门来找第二十项的人身上。时机错:取的时候内容还对,点的时候已经换了库存、换了权限、换了会话。还有一种错是语义上的:预取把要提交的草稿或一次性链接提前消费了,人真正操作时面对的是「已用过」或「不是刚才那份」。

未命中的隐蔽处在于界面可以毫无变化——下一跳仍转圈,像从没预取过。开销在无线电和账单里,不在像素里,所以产品会长期看不见自己在输。更糟的是错误会污染缓存:错身份、错实验分组的页面被存下来,下一次「命中」变成一次悄悄的错内容,负项从浪费升级成错误呈现。

边界

探索性浏览的命中率天然低,用阅读器「下一章」的成功率去要求逛商店的每一张卡,会把这条写成禁预取。允许的做法是把赌注下在真的窄的地方,并接受探索路径不预取。预取元数据失败和预取整页失败量级不同:轻量未命中可以当学习信号(这条规则不适合这类用户),整页视频未命中是事故。用户显式取消、返回、关掉页,应立刻作废对应赌注,不要把已经无用的传输跑完。命中率低但一旦命中收益极大(冷启动很大的编辑器)时,可以保留很窄的预取,但必须能证明未命中率被预算闸住,而不是靠「万一呢」活着。

怎么落地

  • 给每条预取规则记命中率。持续低于阈值就关规则,不要靠个别成功体验续命。
  • 预取结果必须带身份与时效:换用户、换权限、过期则丢弃,禁止把未命中的错误缓存当成下一次的快。
  • 用户离开预测路径(返回、关页、选了别的项)时取消进行中的预取。
  • 验证:看一周的预取日志。若某规则大部分传输从未被那次会话用上,而下一跳的等待分布与关掉预取时相同,这条规则就是在稳定地买无收益。

延伸

  • 同组I2.04.1 预取用可预测性换取感知速度 · I2.04.2 预取消耗流量与电量
  • 相邻I2.05 懒加载 · I2.12 缓存与陈旧内容 · I1.07 首次响应与后续响应
  • 站内检索prefetch miss · speculative waste · hit rate

同组卡片

快捷操作

分享

分享当前页面

ios_share

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