在 eBay.com 上选购快速商品

优化 eBay 网站和应用的性能,以提升用户体验。

速度是 eBay 在 2019 年开展的一项公司级计划,许多团队都决心为用户提供尽可能快速的网站和应用。事实上,搜索页加载时间每加快 100 毫秒,eBay 中“加入购物车”的商品数量就会增加 0.5%。

100 毫秒

缩短了加载时间

0.5%

“添加到购物车”次数增加

通过采用性能预算(通过使用 Chrome 用户体验报告进行竞争力研究后得出)并专注于关键的以用户为中心的性能指标,eBay 能够显著提升网站速度。

优化工作使首页的转化次数提高了 10%,搜索页的转化次数提高了 13%,商品页的转化次数提高了 3%。
提升了 eBay 的速度。

…而他们的 Chrome 用户体验报告数据也突出显示了这些改进。

显示 Chrome 用户体验报告数据的 PageSpeed Insights 视图的屏幕截图,其中突出显示了 eBay.com 的 FCP 为 70%,FID 为 88%,这表明其速度较快
针对 eBay.com 来源的 First Contentful PaintFirst Input Delay 的 Chrome 用户体验报告数据。

我们仍有许多工作要做,但下面是 eBay 迄今为止的收获。

网络性能“切割”

eBay 之所以能够取得这些改进,是因为他们减少了用户体验历程中涉及的各种实体(在大小和时间方面),本文将介绍与整个 Web 开发者社区相关的主题,而不是 eBay 特有的主题。

减少所有文本资源的载荷

提高网站速度的一个方法是减少加载的代码。eBay 通过修剪向用户提供的 JavaScript、CSS、HTML 和 JSON 响应的所有未使用的和不必要的字节,缩减了文本载荷。以前,每推出一项新功能,eBay 都会不断增加响应的载荷,而不会清理未使用的载荷。这些问题日积月累,最终成为性能瓶颈。团队通常会拖延执行此清理活动,但您会惊讶地发现 eBay 节省了多少资源。

这里的“切割”是指响应载荷中浪费的字节。

针对首屏内容的关键路径优化

屏幕上的每个像素都具有不同的重要性。可见区域的内容比不可见区域的内容更重要。iOS/Android/桌面版和 Web 应用都知道这一点,但服务呢?eBay 的服务架构有一个名为体验服务的层,前端(平台专用应用和 Web 服务器)与之通信。此层专为基于视图或设备(而非商品、用户或订单等实体)而设计。然后,eBay 引入了体验服务关键路径的概念。当这些服务收到请求时,它们会通过并行调用其他上游服务,立即获取可见内容的数据。数据准备就绪后,系统会立即刷新数据。折叠下的数据会在稍后的分块中发送或延迟加载。成效:用户可以更快地看到上翻页内容。

此处的“切换”是指服务显示相关内容所花费的时间。

图片优化

图片是导致网页膨胀的主要原因之一。即使是小小的优化也能起到很大的作用。eBay 对图片进行了两项优化。

首先,eBay 在所有平台(包括 iOS、Android 和受支持的浏览器)上为搜索结果采用了 WebP 图片格式。搜索结果页是 eBay 上图片最多的页面,他们已经在使用 WebP,但使用方式并不一致。

经过过滤以显示来自 eBay.com 的 WebP 图片请求的 DevTools 网络面板的屏幕截图
向 eBay.com 上受支持的浏览器提供 WebP 图片。

其次,虽然 eBay 的商品详情图片在大小和格式方面经过了大量优化,但精选图片(例如首页上的顶部模块)并未采用同样严格的标准。eBay 有很多精选图片,这些图片是通过各种工具上传的。以前,优化工作由上传者负责,但现在 eBay 会强制执行工具中的规则,因此上传的所有图片都会得到适当优化。

这里的“剪裁”是指向用户发送的浪费的图片字节。

对静态资源进行预测性预提取

eBay 上的用户会话不仅仅是指单个网页。这是一个流程。例如,流程可以是从首页导航到搜索页面,再到商品页面。那么,为什么流程中的页面不能相互帮助?这就是预测性预提取的概念,其中一个网页会预提取下一个可能访问的网页所需的静态资源。

借助预测性预提取功能,当用户导航到预测的网页时,资源已位于浏览器缓存中。这适用于 CSS 和 JavaScript 资源,其中可以提前检索网址。需要注意的是,此功能仅在首次导航时有效。在后续导航中,静态资源将已在缓存中。

eBay 正在对静态资源进行预测性预加载。首页会预加载搜索广告素材资源,搜索广告素材资源会预加载商品广告素材资源,以此类推。我们正在考虑基于机器学习和分析的预提取功能。

这里的“缩减”是指首次导航时 CSS 和 JavaScript 静态资源的网络时间。

预提取热门搜索结果

当用户在 eBay 上搜索时,eBay 的分析数据表明,用户很可能会前往搜索结果前 10 名中的商品。因此,eBay 现在会预提取搜索结果中的商品,并在用户导航时将其保持就绪状态。预加载发生在两个级别。

第一级缓存发生在服务器端,商品服务会缓存搜索结果中的前 10 个商品。现在,当用户前往其中一个商品时,eBay 可以节省服务器处理时间。服务器端缓存由平台专用应用利用,并在全球范围内推出。

另一级缓存发生在浏览器缓存中,此功能在澳大利亚推出。由于项具有动态特性,项预提取是一项高级优化。其中还有很多细微之处:网页展示次数、容量、竞价项等。您可以参阅 LinkedIn 性能工程 Meetup 演示文稿,详细了解该工具;也可以期待 eBay 工程师就此主题撰写的详细博文。

eBay 会预加载搜索结果页中的前 5 项,以便快速加载后续内容。这发生在 requestIdleCallback() 的空闲时间。这导致“可见区域内内容的平均显示时间”(这是一个类似于“首次有意义的绘制”的自定义指标)中位数缩短了 759 毫秒。eBay 发现预加载对转化有积极影响。

此处的“切割”可以是服务器处理时间或网络时间,具体取决于内容的缓存位置。

提前下载搜索图片

在搜索结果页中,当您发出高级查询时,会发生以下两件事。第一步是召回/排名步骤,系统会在此步骤中返回与查询最相关的项。第二步是向重新调用的项添加与用户情境相关的其他信息,例如运费。现在,eBay 会立即将前 10 张商品图片连同标头一起发送到浏览器,以便在其余标记到达之前开始下载。因此,图片现在会更快地显示。这项变更已在全球范围内面向网站平台发布。

此处的“截断时间”是指搜索结果图片的下载开始时间。

自动补全数据的边缘缓存

当用户在搜索框中输入字母时,系统会弹出建议。这些建议至少会在一天内针对字母组合保持不变。这类请求非常适合从 CDN 缓存和传送(最长 24 小时),而不是让请求一直到达数据中心。CDN 缓存对国际市场尤其有益。

eBay 搜索框的屏幕截图,显示了针对搜索查询的自动补全建议。

不过,有一个问题。eBay 的建议弹出式窗口中包含一些个性化元素,这些元素无法高效地缓存。幸运的是,在特定平台的应用中,这不是一个问题,因为用于个性化和建议的界面可以分开。对于国际市场上的网站,延迟时间比个性化带来的小优势更重要。解决了这个问题后,eBay 现在可以通过 CDN 缓存向全球范围内平台专用应用和 eBay.com 的非美国市场提供自动建议。

这里的“切换”是指自动建议的网络延迟时间和服务器处理时间。

针对无法识别的首页用户的边缘缓存

对于网站平台,特定地区无法识别的用户看到的首页内容是相同的。这些用户是首次使用 eBay 或刚开始新的会话,因此不会获得个性化体验。虽然首页广告素材会频繁更改,但仍有缓存空间。

eBay 决定在其边缘网络 (PoPs) 上暂时缓存无法识别的用户内容 (HTML)。首次访问的用户现在可以从距离他们较近的服务器获取首页内容,而不是从遥远的数据中心获取。eBay 仍在国际市场上对此进行实验,因为在这些市场上,此功能的影响更大。

这里的“截断时间”是指无法识别的用户的网络延迟时间和服务器处理时间。

针对其他平台的优化

改进了 iOS/Android 应用解析

iOS/Android 应用与后端服务通信,后端服务的响应格式通常为 JSON。这些 JSON 载荷可能很大。eBay 引入了一种高效的解析算法,该算法会针对需要立即显示的内容进行优化,而不是解析整个 JSON 以在屏幕上呈现内容。

用户现在可以更快地看到内容。此外,对于 Android 应用,只要用户开始在搜索框中输入内容,eBay 就会立即开始初始化搜索视图控制器(iOS 已进行此优化)。以前,只有在用户按下搜索按钮后,才会出现这种情况。现在,用户可以更快地看到搜索结果。这里的“切换时间”是指设备显示相关内容所花费的时间。

缩短 Android 应用启动时间

这适用于 Android 应用的冷启动时间优化。当应用冷启动时,操作系统级别和应用级别都会发生大量初始化。缩短应用级初始化时间有助于用户更快地看到主屏幕。eBay 进行了一些性能分析,发现并非所有初始化都必须完成才能显示内容,有些初始化可以延迟执行。

更重要的是,eBay 发现有一个阻塞的第三方分析调用延迟了屏幕上的渲染。移除阻塞调用并将其设为异步进一步缩短了冷启动时间。这里所说的“缩减”是指 Android 应用的启动时间。

总结

eBay 所做的所有效果“削减”措施都共同促成了这一变化,而且这是一个长期的过程。这些版本在整个一年中分阶段发布,每次发布都会缩短几十毫秒,最终达到了 eBay 目前的水平:

Chrome 用户体验报告的屏幕截图,显示了 eBay.com 的实测数据改进情况。
Chrome 用户体验报告信息中心显示了 eBay 在提升速度方面的努力对其现场指标的影响。

效果是一项功能,也是一项竞争优势。优化后的体验可提高用户互动度、转化次数和投资回报率。在 eBay 的案例中,这些优化措施既包括费力较少的措施,也包括一些高级措施。

如需了解详情,请参阅千刀万剐,提升速度。此外,请密切关注 eBay 工程师近期发表的有关性能工作的更详细文章。