Joye Personal Blog

Back

组件 loadingskeletonperceived-performance

骨架屏比转圈显得快

整块内容要等一两秒时,先用灰块画出最终版式:比空白更让人放心,比转圈更让人知道在等什么,内容到了也不会跳。

来源 ↗
views

打开一个列表页,数据要一两秒才回来。这段时间里放什么,我见过三种做法:什么都不放,放一个转圈,或者先画出一份灰色的版式。数据到达的时间完全一样,但三种做法给人的感觉差得很远,最后一种明显显得更快。

三种做法同时开始加载,2 秒后拿到同一份内容。加载中…
✕ 空白

两秒钟什么都没有。页头还在,下面一片空白,人会以为页面坏了,开始刷新或者直接离开。

✕ 转圈

知道在加载,但不知道会来什么。盯住下面的“查看更多”:内容一到,它会被整块冒出来的列表一下顶到最底下。

✓ 骨架屏

先把版式画出来:头像、名字、两行正文各在什么位置,一眼就知道。内容到了原地填上,“查看更多”一动不动。

01空白最糟。没有任何反馈,人会以为页面卡住了。哪怕只放一个转圈,也比一片空白强。
02转圈只说“在等”,不说“等什么”。内容到的那一刻整块出现,下面的东西被顶走,视线要重新找位置。
03骨架屏和最终版式一一对应。等待时眼睛已经在熟悉结构,内容来了只是“填进去”,等待也显得更短。
三个列表同时加载同一份内容。点“重新加载”多看几遍,注意每一栏下面的“查看更多”。

为什么这样更好#

  • 空白让人以为坏了。页头还在、下面一片空,人分不清是在加载还是出了错,很可能开始刷新或者直接离开。
  • 转圈只说明“在等”。它确认了系统没死机,但不告诉你会来什么、来多少,等待的这段时间什么也做不了。
  • 骨架屏提前给出结构。头像、名字、两行正文的位置先摆好,眼睛在等待中就已经熟悉了版式,内容到达时不用从头去读整页。
  • 内容原地填上,不跳。骨架和最终版式尺寸一致,数据到了只是灰块变成文字;转圈那一栏的列表则是整块冒出来,把下面的按钮一下顶走。
  • 等待显得更短。页面是一点点“长出来”的,而不是空了很久突然出现,同样两秒,感觉上更快。

关键是骨架必须照着真实版式画:头像多大、每条有几行字,都要对得上。随手画几条灰块,内容到达时照样会跳。

什么时候不该用#

  • 加载不到 1 秒就完成,任何加载提示都不需要,骨架屏一闪而过反而成了干扰。
  • 等待超过 10 秒,或者是上传、导出这类有明确进度的任务,应该用进度条告诉用户还要多久。
  • 只是页面里的一个小模块(一段视频、仪表盘上的一张卡片)在加载,用一个转圈就够了。另外,只画页头页脚、中间留空的“骨架”,效果和空白差不多。

出处#

来自 Nielsen Norman Group 的 Skeleton Screens 101 ↗。文章把骨架屏定位为整页加载时的进度提示,认为它能让等待显得更短、减少认知负担;同时给出了边界:1 秒以内不需要提示,10 秒以上用进度条,单个模块用转圈,只有页头页脚的框架式骨架会让人以为页面坏了。