I1.07.3shift cold-start to unperceived moment设计

预热或预加载可以把首次开销转移到用户无感知的时机

别名: 预热 · 空闲预加载 · warmup

概念解释

入场费不一定要当场收。预热(warmup)和预加载(preload)把握手、分片下载、缓存填满挪到人还没发出那一次操作的空档:启动动画在播、上一页还在读、光标停在按钮上。首次开销还在,只是账单从「我按下之后」改记到「我还没要」的时段。人感知到的第一次,已经接近稳态。

转移成功的条件是空档真的空,且赌对了下一步。赌错了,只是把流量和电花在没人要的路径上——那是预取那一组的代价,这里只谈转移时机。

机制

人的感知时钟从意图发出才开始走。意图发出之前的工作,只要不抢当前交互的帧,就不进等待体验。启动屏、阅读停顿、悬停、滚动减速,都是意图尚未发出的窗口。把冷工作塞进这些窗口,等于把首次响应的客观慢,从用户的等待预算里挪走。

窗口有长度上限。启动动画若被拉长来掩护预热,掩护本身变成等待。悬停预热若在 100 毫秒内触发,误悬停会打一堆冷请求。所以转移不是「越早越好」,是「在意图概率已经高、又还没开始等」的那一段。

边界

隐私敏感的数据不能因为「可能下一步会看」就预加载。计量网络和低电量时,空档不再是免费的。预热抢主线程,会把当前页的滚动变沉,等于拿正在进行的体验给尚未发生的第一次送礼。用户明确不会走的分支(权限已拒绝、功能对当前角色关闭)预热是纯浪费。

怎么落地

  • 在启动完成、首屏可交互之后再预热下一步最可能的模块,不要用更长的启动屏去掩护。
  • 对高概率下一步(列表里的第一项、明显的主按钮)做空闲时预连接或预下载;对低概率入口不要。
  • 预热必须可让路:用户一旦开始滚动或输入,预热降优先级或取消。
  • 验证:冷启动后不要立刻点目标按钮,等两秒再点,耗时应接近稳态。对照是冷启动后立刻点。若两条一样慢,预热没有在空档里跑完,或根本没跑。

延伸

  • 同组I1.07.1 首次响应包含额外的初始化开销,通常慢于稳态响应 · I1.07.2 用户对首次操作的耐心阈值高于后续重复操作 · I1.07.4 首次与稳态响应若差异悬殊,用户会误判系统整体性能
  • 相邻I2.04 预取与预加载 · I1.04 输入延迟与跟手性
  • 站内检索warmup · preload · speculative connection

同组卡片

快捷操作

分享

分享当前页面

ios_share

https://hci.top/zh/handbook/I1.07.3