【译】Web 页面的体积膨胀了 10 年,我们学到了什么?

2024-09-19  本文已影响0人  涅槃快乐是金

我多年来一直在写有关页面大小和复杂性的文章。如果你在性能领域工作了一段时间,当你听到我开始谈论页面增长时,我完全理解你会想要逃跑。;)

但页面的大小和复杂性每年都在增加,而这种增长并没有完全被更快的设备和网络,或者我们辛勤工作的浏览器所缓解。显然,我们需要继续讨论这个问题。我们需要理解不断增长的页面如何对我们不利,并制定策略来理解和管理我们的页面。

当我们谈论页面大小时,我们指的是什么?

页面大小是指页面的整体重量和复杂性,具体包括:

页面膨胀如何损害你的业务?


几年前我参与的一项谷歌机器学习研究发现,页面元素的总数量是转化率的最大预测因素,而页面上图像的数量是第二大预测因素。
我们还发现,在一个会话中,页面上的脚本数量越多,转化的可能性越小。


图像大小也是一个问题,过多的图像重量会影响你在谷歌图片搜索中的SEO排名。考虑到图片搜索占谷歌搜索的26%以上,这点值得重视。

今天的页面有多大,与十年前相比如何?

在讨论这些数据之前,先说明几点背景和注意事项:

1. 现在桌面页面的中位数大小是十年前的3倍

我已经观察这些数据超过十年,所以这种增长并不让我惊讶。中位数大小为2159 KB,与我每周检查的大量页面情况大致相符。


2. 图像和JavaScript占总页面重量的三分之二

可以预料的是,页面大小的增长主要由图像和JavaScript驱动。图像占据中位数桌面页面重量的44%(约945 KB),JS则占23%(约500 KB)。)


3. 移动页面的中位数大小是十年前的近7倍

服务于移动用户的页面也经历了大幅增长。中位数大小为1984 KB,略小于桌面页面的2159 KB。虽然大而快速的页面是有可能的,但我们仍应关注页面膨胀对移动用户的影响,尤其是那些使用低CPU设备或带宽受限的移动用户。


4. 图像和JavaScript占据了移动页面的大部分重量

我们为移动用户提供了约876 KB的图像和453 KB的脚本,占总页面重量的67%。JavaScript大量消耗CPU,尤其是对于低性能设备用户,这点非常令人担忧。如果你依赖用户使用新设备,可能需要重新考虑这一点。近年来,智能手机的更换周期越来越长,这一趋势似乎将继续下去。


5. 第90百分位的页面非常庞大,主要由图像重量构成

仅关注中位数是不够的,你还应关注90百分位用户群体。虽然10%的用户听起来不多,但如果你的网站每月有1000万访客,那意味着有100万用户的体验非常糟糕。
90百分位的桌面页面大小为8271 KB,包含177个资源。页面重量的近75%由图像占据,总计超过5 MB。



90百分位的移动页面稍微小一点,为7574 KB,包含168个资源。


6. 桌面页面的资源数量多年保持不变

无论是中位数还是90百分位的数据都显示资源数量相对稳定。事实上,这让我有些惊讶。我原以为随着页面总大小的增长,资源数量也会显著增加。


7. 但移动页面的资源数量在增加

这并不意外。我们早已远离十年前为移动用户提供的简化页面。


8. 图像请求大幅减少,但图像大小大幅增加

虽然我们提供的图像数量减少了,但这些图像是高分辨率的,或者未经优化。如今的中位数页面包含25张图像,而2012年这一数字为42张。虽然图像请求数量急剧下降,但总大小几乎增加了三倍,从331 KB增至945 KB。



这种趋势也延续到了移动端。图像请求数量保持不变,但总图像大小几乎增加了6倍——从151 KB增至876 KB。


9. JavaScript请求数量翻倍,而JS体积几乎增加了四倍

我们提供的脚本比以往更多,带来了性能风险,同时页面的JS体积达到500 KB。



移动页面稍微好一些,JS体积为453 KB。


10. 桌面和移动页面的CSS请求数量都增加了一倍以上

更多的样式表意味着更高的性能退化风险。页面上的CSS数量需要关注,因为有问题的CSS可能阻止页面其他部分渲染。



页面膨胀如何影响核心网页指标(Core Web Vitals)?

Google 的核心网页指标是一组旨在从用户体验角度衡量性能的指标。虽然页面总大小和重量不会直接影响核心网页指标,但你需要仔细考虑所提供资源的数量和大小。

最大内容渲染 (LCP)

最大内容渲染(LCP)衡量页面上最大可见元素的渲染时间。页面膨胀可能导致以下问题影响LCP时间:

首次输入延迟 (FID)

首次输入延迟(FID)衡量页面响应用户交互的速度。输入延迟通常发生在浏览器的主线程忙于解析和执行大型JavaScript文件时。

很多页面上都有不必要的JS文件,正如上文所提到,JS文件的体积逐年增加。页面上的JS越多,FID变慢的可能性就越大。Tim Kadlec 在他的演讲中提到:

“JavaScript 是网络上每字节最昂贵的资源,而且我们的网站使用它的量比以往更多。即使你优化交付、解析和执行,你也永远无法让它比不使用JS的情况更高效。”

累计布局偏移 (CLS)

累计布局偏移(CLS)衡量页面的视觉稳定性。它基于一个公式,简而言之,它计算页面中视觉内容在视口中的偏移量和偏移距离。CLS帮助你理解页面是否会为用户带来“卡顿”的体验。

CLS受到页面资源数量和这些资源的加载时间和方式的强烈影响。例如,Sears.com 的CLS得分为1.0468,而Google推荐的得分为0.1或以下。也就是说,这是一个非常“卡顿”的页面!
这些截图突出了最重要的视觉元素变化:


image.png

不出所料,虽然这个页面的总体大小(接近 3 MB)并不算太大,但它包含了大量的请求。在这 559 个请求中,大部分是图片(175 个请求)、JavaScript(140 个请求)和“其他”(133 个请求)。



查看同一页面的瀑布图,我们可以看到:

这确实是很多请求!

大页面能否提供良好的用户体验?

可以。虽然页面大小可能是实际性能问题的预警信号,但如果你关注用户体验,你需要仔细查看页面的构建方式,判断页面的大小和复杂性是否真的影响了用户感受到的加载速度。

仅看总请求数和页面大小这些粗略的指标是不够的,你还需要了解:

亚马逊是提供大型、快速页面的一个很好的例子。在最近的行业页面速度基准测试中,亚马逊首页在开始渲染时间方面表现最佳。尽管页面包含 410 个请求,总大小达到 4,311 KB——远超前面提到的中值大小——但页面的开始渲染时间仅为 0.3 秒,最大内容渲染时间为 0.48 秒,CLS 分数为 0.1526。



从亚马逊的瀑布图细节中可以看出原因。虽然在最大内容渲染(Largest Contentful Paint)之前加载了 38 个资源,但其中只有一个是阻塞渲染的,并且这些资源都非常轻量。


关键点总结

我遇到过很多负责构建和优化网站的人。当我们查看他们页面的构建方式时,往往会看到他们对页面中的一些问题感到惊讶,比如幽灵脚本、大量未优化的图像以及他们没有意识到的阻塞资源。这些人都很聪明,问题并不在于他们,而在于网站的规模、发布周期的速度以及触及每个页面的人数。

我们不可能回到 1999 年之前的轻量化、低于 1MB 的网页时代。但我们可以重新控制现有的页面。

  1. 理解每个页面的关键渲染路径
    你的页面上可能有很多不必要的垃圾文件,其中一些还未被优化。太多的内容会让你无法看到整体问题。你可以拥有体积大、复杂的页面,但仍然能让它们感觉很快。良好用户体验的关键是快速传递最重要的内容。这里有一些用于分析和优化关键渲染路径的优秀资源。

  2. 确保每个接触页面的人都了解其行为对性能的影响
    再多的高级性能监控工具,如果组织内没有强大的性能文化,也是无法帮助你的。这里有一些帮助你在这条路上前进的提示和最佳实践。

  3. 防止性能回退
    页面膨胀通常发生在人们不再关注的时候。我们需要持续地监控页面。将性能测试集成到 CI/CD 过程中是防止性能回退的好方法,特别是如果你结合了性能预算。通过为关键指标(如开始渲染、最大内容渲染以及各种页面大小和重量的指标)设定性能预算,当这些指标超出界限时,你可以收到提醒。

  4. 不要假设硬件和网络会缓解页面膨胀
    虽然一些用户可能拥有更新的设备和快速的网络,但并不是所有人都这么幸运。如果你使用了真实用户监控工具,请关注第 75 和 95 百分位的性能指标,这样你就能了解网站在较差环境下的表现。

上一篇下一篇

猜你喜欢

热点阅读