Mercado Libre 如何针对网页指标进行优化 (TBT/FID)

优化了商品详情页面的互动性,使 Lighthouse 中的最大潜在 FID 降低了 90%,Chrome 用户体验报告中的 FID 则降低了 9%。

Carlos Aranha
Carlos Aranha
Demián Renzulli
Demián Renzulli
Joan Baca
Joan Baca

Mercado Libre 是拉丁美洲最大的电子商务和付款生态系统。该平台已在 18 个国家/地区开展业务,是巴西、墨西哥和阿根廷的市场领导者(根据唯一访问者数和网页浏览量)。

该公司一直以来都非常重视 Web 性能,但最近他们组建了一个团队,负责监控性能并针对网站的不同部分进行优化。

本文总结了 Mercado Libre 前端架构团队的 Guille PazPablo CarminattiOleh Burkhay 在优化核心网页指标之一(即 首次输入延迟 [FID] 及其实验室代理 [总屏蔽时间 [TBT]])方面所做的工作。

90%

Lighthouse 中的最长潜在 FID 缩短

9%

在 CrUX 中,更多用户将 FID 评为“快”

任务运行时间过长、First Input Delay 延迟时间和总屏蔽时间

运行耗时的 JavaScript 代码可能会导致长任务,即在浏览器的主线程中运行时间超过 50 毫秒的任务。

FID(首次输入延迟)用于衡量从用户首次与网页互动(例如点击链接)到浏览器实际能够开始处理事件处理脚本以响应该互动的时间。执行耗时 JavaScript 代码的网站可能会有多个耗时任务,最终会对 FID 产生负面影响。

为了提供良好的用户体验,网站应尽量将 First Input Delay 控制在 100 毫秒以内: 良好的 fid 值为 2.5 秒,较差的值大于 4.0 秒,介于二者之间的值需要改进

虽然 Mercado Libre 的网站在大多数部分的表现都很出色,但他们在 Chrome 用户体验报告中发现,商品详情页面的 FID 较差。根据这些信息,他们决定将精力集中在提升网站上商品页面的互动性上。

Mercado Libre 商品详情页的移动版和桌面版。
Mercado Libre 商品详情页面的移动版和桌面版。

这些页面允许用户执行复杂的互动,因此目标是优化互动性,同时不干扰有价值的功能。

衡量商品详情页面的互动度

FID 需要真实用户,因此无法在实验室中衡量。不过,Total Blocking Time (TBT) 指标可在实验室中衡量,与实际环境中的 FID 高度相关,还能捕获影响交互性的问题。

例如,在以下轨迹中,虽然在主线程上运行任务所花费的总时间为 560 毫秒,但其中只有 345 毫秒被视为总阻塞时间(每个任务超过 50 毫秒的部分的总和):

主线程上的任务时间轴,显示了阻塞时间

Mercado Libre 在实验室中将 TBT 用作代理指标,以衡量和改进真实世界中商品详情页面的互动度。

他们采用的大致方法如下:

使用 WebPageTest 直观呈现长时间任务

WebPageTest (WPT) 是一款 Web 性能工具,可让您在世界各地不同位置的实体设备上运行测试。

Mercado Libre 使用 WPT 选择与真实用户相似的设备类型和位置,以重现用户体验。具体而言,他们选择了 Moto 4G 设备弗吉尼亚州杜勒斯,因为他们希望尽可能贴近墨西哥 Mercado Libre 用户的体验。通过观察 WPT 的主线程视图,Mercado Libre 发现有多个连续的长任务阻塞了主线程 2 秒钟:

Mercado Libre 商品详情页面的主线程视图。
Mercado Libre 商品详情页面的主线程视图。

分析相应的广告瀑布流后,他们发现这两秒钟中相当一部分时间来自其分析模块。应用的主要软件包大小很大(950KB),解析、编译和执行需要很长时间。

商品详情页面的广告瀑布流视图。
Mercado Libre 商品详情页面的瀑布流视图。

使用 Lighthouse 确定最长的潜在 FID

Lighthouse 不允许您在不同设备和位置之间进行选择,但它是一款非常实用的工具,可用于诊断网站和获取性能建议。

在商品详情页面上运行 Lighthouse 时,Mercado Libre 发现最大潜在 FID 是唯一标记为红色的指标,其值为 1710 毫秒

Mercado Libre 商品详情页面的 PSI 报告中的 Lighthouse 指标。

基于此,Mercado Libre 设定了一个目标,即在 Lighthouse 和 WebPageTest 等实验室工具中提高其最大潜在 FID 得分,假设这些改进会影响他们的真实用户,因此会在 Chrome 用户体验报告等真实用户监控工具中体现出来。

优化长任务

第一次迭代

根据主线程轨迹,Mercado Libre 设定了优化运行开销较大的两个模块的目标。

他们开始优化内部跟踪模块的性能。此模块包含一个 CPU 密集型任务,该任务对模块的运行不是必不可少的,因此可以安全地移除。这使得整个网站的 JavaScript 减少了 2%。

之后,他们开始着手缩减通用软件包大小

Mercado Libre 使用 webpack-bundle-analyzer 检测优化机会:

他们还应用了以下 Babel 优化:

经过这些优化,bundle 大小缩减了约 16%

衡量成效

这些更改将 Mercado Libre 的连续长任务时间从 2 秒缩短到了 1 秒:

在完成第一轮优化后,Mercado Libre 商品详情页面的主线程视图。
在 WPT 的顶部广告瀑布流中,第 3 秒和第 5 秒之间有一个长长的红色条(位于“网页是互动网页”行中)。在底部广告瀑布流中,该栏已被拆分成更小的部分,占用主线程的时间更短。

Lighthouse 显示首次输入延迟最长预估值缩短了 57%

在完成第一轮优化后,Mercado Libre 产品详情页面的 PSI 报告中的 Lighthouse 指标。

第二次迭代

该团队继续深入研究耗时任务,以寻找后续改进。

在完成第一轮优化后,Mercado Libre 商品详情页面主线程视图的详细视图。
瀑布图(未显示)帮助 Mercado Libre 确定了哪些库在大量使用主线程(浏览器主线程行),并且网页是否可互动行清楚地表明此主线程 activity 正在阻止互动。

根据这些信息,他们决定实施以下更改:

  • 继续缩减主 bundle 的大小,以优化编译和解析时间(例如,通过移除不同模块中的重复依赖项)。
  • 在组件级别应用代码拆分,将 JavaScript 拆分为较小的部分,以便更智能地加载不同的组件。
  • 推迟组件注水,以便更智能地使用主线程。这种技术通常称为“部分水合”。

衡量成效

生成的 WebPageTest 轨迹显示了更小的 JS 执行分块:

在第二轮优化后,Mercado Libre 商品详情页面的主线程视图。

其在 Lighthouse 中的最长的潜在 FID 时间又缩短了 60%

在完成第一轮优化后,Mercado Libre 产品详情页面的 PSI 报告中的 Lighthouse 指标。

直观呈现真实用户的进度

虽然 WebPageTest 和 Lighthouse 等实验室测试工具非常适合在开发过程中迭代解决方案,但真正的目标是改善真实用户的体验。

Chrome 用户体验报告提供了与真实的 Chrome 用户在网络上访问热门网址时的具体情形相关的用户体验指标。您可以通过在 BigQuery 中运行查询PageSpeedInsightsCrUX API 来获取报告中的数据。

CrUX 信息中心可让您轻松直观地了解核心指标的进度:

。
Mercado Libre 在 2020 年 1 月至 2020 年 4 月期间的 FID 进展。在优化项目实施之前,82% 的用户认为 FID 较快(低于 100 毫秒)。之后,超过 91% 的用户认为该指标的速度很快。

后续步骤

网站性能优化是一项永无止境的工作,Mercado Libre 深知这些优化措施为其用户带来的价值。他们继续在整个网站上应用多项优化,包括在商品详情页面中进行prefetching、图片优化等,同时还不断改进商品详情页面,以进一步缩短总屏蔽时间 (TBT),并通过代理 FID 来缩短总屏蔽时间。这些优化措施包括:

  • 迭代代码分块解决方案。
  • 改进了第三方脚本的执行方式。
  • 继续改进了捆绑器级别(webpack)的资源捆绑。

Mercado Libre 全面关注网站性能,因此在继续优化网站互动性的同时,他们还开始更加深入地评估当前另外两个核心网页指标(即 LCP [Largest Contentful Paint]CLS [Cumulative Layout Shift])的改进机会。