F4.15.2FOIT versus FOUT设计
长时间空白等待字体会比先用回退字体展示更损害体验
别名: FOIT · 隐形文本闪现 · 空白等字体
概念解释
阻塞绘制时,字的位置在,墨是透明的,这段叫隐形文本闪现(FOIT, flash of invisible text)。先用后备字体画出来,自定义字体到了再换,叫 FOUT(flash of unstyled text)。等几秒空白,人会以为正文没加载、页面坏了;先看到「不太对的字体」,人知道字在,只是脸还没换好。长时间空白的伤害大于换脸那一下——看不见的等待比难看的等待更像故障。
机制
阅读任务的第一步是确认「这里有字」。FOIT 把这一步拿走,只留下与字同高的空洞,按钮像没标签,标题像没标题。超时三秒在实验室里不长,在首屏上已经够用户返回或重试。FOUT 保留确认,付出的是一次样式跳变。人能解释跳变(「字体刚加载完」),不能解释空白(「是不是没网」)。阻塞期越长,FOIT 越像宕机;弱网、字体文件大、一次拉好几张字重时,阻塞被拉到以秒计。这不是审美偏好,是故障归因:空白被归到系统坏了,换脸被归到还在加载。
边界
字标、单个品牌词,空白几十毫秒往往看不出来,FOIT 的伤害接近零;一屏正文不行。用户已经读过缓存里的页面、字体也在缓存里,两条路都不会闪。极慢网上 FOUT 会长时间停在后备字体,若后备字体缺字或可读性差,可见但不可读,伤害会反超——那是后备字体选错,不是「应该改回空白」。动画或骨架屏若已经在表达「内容将至」,FOIT 叠加上去是双重空洞。
怎么落地
- 正文和按钮标签不要走长时间阻塞;宁可先用系统字体出现。
- 在弱网档位录首屏:从进入到第一个可读词的时间。FOIT 路径上这段时间里屏幕没有字;把它和 FOUT 路径比,通常立刻能看出哪条像故障。
- 字体文件拆字重、子集化,缩短自定义字体到达时间,让 FOUT 的换脸窗口变短,而不是靠加长阻塞去赌文件先到。