前端开发人员必须管理加载体验

Avatar of Chris Coyier
Chris Coyier

DigitalOcean 为您的旅程的每个阶段提供云产品。 立即开始使用 200 美元的免费信用额度!

Web 性能是一个非常复杂的主题。 有总请求数、页面重量、首次渲染时间、可交互时间、首次输入延迟等指标。 需要考虑异步请求、渲染阻塞和优先级下载等事项。 我们经常讨论性能预算性能文化

第一个文档从服务器下载的方式是一个热门话题。 这就是大多数与后端相关的性能讨论进入画面的地方。 它催生了像JAMstack这样的架构,至少我们不用担心index.html速度慢。

图像有自己的性能故事(格式!自适应图像!)。 字体也是(FOUT'n'friends!)。 CSS 也一样(谈论渲染阻塞!)。 服务工作者可以在各个层级参与。 当然,JavaScript 可能是最常讨论的性能反派。 所有这些都与最重要的通用性能概念相平衡:感知性能前端开发人员在性能方面已经有很多责任。 80% 是普遍认可的数字,在我看来是合理的。

让我们暂时假设我们要构建一个网站,并且要进行服务器端渲染。 相反,我们要加载一个空文档,并尽快启动数据 API 调用,然后使用该数据渲染网站。 如今这并非罕见的情况。 您可以想象,>我们现在有了另一个主要问题:处理加载体验。

前几天我对此进行了思考。 这是一个例子

我想说这种加载体验非常糟糕,而且我使用的是最好的硬件和互联网连接。 这并不算灾难,而且肯定有成千上万的人每天都在成功使用这个网站。 也就是说,它不像你想象的未来时代的高预算网站那样感觉快速、流畅或特别好。

部分原因可能是因为该页面没有进行服务器端渲染。 无论出于何种原因(我们无法从外部得知),他们并没有这样做。 这可能是开发人员效率、安全问题、重写过程中的临时状态……谁知道呢!(这可能不是无知。)

我们该怎么办? 好吧,我认为这是一个稍微有点新的问题,出现在前端开发中。 我们告诉浏览器:“嘿,我们搞定了。 我们将根据我们的 API 向我们提供内容以及我们的前端框架何时决定进行操作,以无序的方式加载所有内容。” 我可以理解这种观点,认为这不是理想的做法,我们放弃了浏览器非常擅长做的事情,而是自己做了一些做得不如他们好的事情。 但是,正如我在这里稍微解释过的那样,世界很复杂。

实际上发生的事情是,这些前端框架意识到了这个问题,并正在采取措施来帮助管理它。 今年四月,Dan Abramov 推出了 React Suspense。 它似乎是一个工具,可以帮助我们这些前端开发人员管理一个想法,即我们现在需要处理比以往更多的加载状态问题。

大约 14 分钟后,他开始介绍使用占位符组件、缓存等获取数据。 当然,这个问题并不局限于 React,但为了保持一致性,以下是由 Andrew Clark 进行的一次会议演讲,我很快就感同身受(但最终使用了相同的演示等)

仅仅是等待显示加载指示器一会儿就能在很大程度上消除加载时的卡顿感。

Mikael Ainalem 在最近的一篇文章中指出了这一点,闪烁的加载指示器的简史。 他更清楚地解释了我试图说的话。

这种发展背后的一个原因是我们所见过的异步编程的变化。 异步编程比以前容易多了。 大多数现代语言都很好地支持动态加载数据。 现代 JavaScript 已包含 Promise,并且 ES7 带来了 async 和 await 关键字。 使用 async/await 关键字可以轻松获取数据并在需要时处理数据。 这意味着我们需要更进一步地思考如何向用户显示数据正在加载。

此外,他还提供了一些解决方案!

查看 Pen 闪烁的加载指示器,作者是 Mikael Ainalem (@ainalem),网站是 CodePen

我们必须在这方面做得更好。