1 min read

加载中

在 app 上,我们经常见到“加载中”的图标。这是站在用户的角度看。如果切换到开发者角度,则会有一个疑惑,这个 loading 图标是即刻出现的吗?

如果 http 响应很快,则一闪而过的 loading 对用户来说,体验并不好。

可是,我们怎么知道一个响应是快还是慢?毕竟,网络的状况并不可控,一个响应在美国也许很快,在中国却异常的慢。

一个更友好的解决办法,可能是这样:

  1. http 请求发起
  2. 100ms 内响应,则不需要调出 loading
  3. 如果 100ms 内还未响应,则调出 loading

nngroup 进度指示条一文里 ,作者提到一个参考时间:

This indicator should be reserved for actions that take between 2-10 seconds. For anything that takes less than 1 second to load, it is distracting to use a looped animation, because users cannot keep up with what happened and might feel anxious about whatever flashed on the screen.

如果 1s 内能响应,就不该用循环动画来指示进度,因为用户没法跟上,可能会对屏幕上一闪而过的东西感到焦虑。

所以上面的解决办法可以修改为:

  1. http 请求发起
  2. 10s 内响应,则不需要调出 loading
  3. 如果 10s 内未响应,则调出 loading

只是这里会有一个问题出现,如果 http 请求在 11s 时响应,则 loading 还是一闪而过。 – 在 web 的复杂环境下,这近于无解。

至于代码实现上,我们通常需要封装一个专用的 API 来处理 http 请求。

报告问题 修订

如果你有自建 https 代理的需求,欢迎尝试 Phantom,一键搭建,方便快捷。查看 demo