I1.07.3shift cold-start to unperceived moment设计
预热或预加载可以把首次开销转移到用户无感知的时机
别名: 预热 · 空闲预加载 · warmup
概念解释
入场费不一定要当场收。预热(warmup)和预加载(preload)把握手、分片下载、缓存填满挪到人还没发出那一次操作的空档:启动动画在播、上一页还在读、光标停在按钮上。首次开销还在,只是账单从「我按下之后」改记到「我还没要」的时段。人感知到的第一次,已经接近稳态。
转移成功的条件是空档真的空,且赌对了下一步。赌错了,只是把流量和电花在没人要的路径上——那是预取那一组的代价,这里只谈转移时机。
机制
人的感知时钟从意图发出才开始走。意图发出之前的工作,只要不抢当前交互的帧,就不进等待体验。启动屏、阅读停顿、悬停、滚动减速,都是意图尚未发出的窗口。把冷工作塞进这些窗口,等于把首次响应的客观慢,从用户的等待预算里挪走。
窗口有长度上限。启动动画若被拉长来掩护预热,掩护本身变成等待。悬停预热若在 100 毫秒内触发,误悬停会打一堆冷请求。所以转移不是「越早越好」,是「在意图概率已经高、又还没开始等」的那一段。
边界
隐私敏感的数据不能因为「可能下一步会看」就预加载。计量网络和低电量时,空档不再是免费的。预热抢主线程,会把当前页的滚动变沉,等于拿正在进行的体验给尚未发生的第一次送礼。用户明确不会走的分支(权限已拒绝、功能对当前角色关闭)预热是纯浪费。
怎么落地
- 在启动完成、首屏可交互之后再预热下一步最可能的模块,不要用更长的启动屏去掩护。
- 对高概率下一步(列表里的第一项、明显的主按钮)做空闲时预连接或预下载;对低概率入口不要。
- 预热必须可让路:用户一旦开始滚动或输入,预热降优先级或取消。
- 验证:冷启动后不要立刻点目标按钮,等两秒再点,耗时应接近稳态。对照是冷启动后立刻点。若两条一样慢,预热没有在空档里跑完,或根本没跑。