Google 如何利用“在重新验证时过时”功能提升广告效果

了解如何通过更快地加载第三方资源来提高收入。

Jonathon Imperiosi
Jonathon Imperiosi

此案例研究重点介绍了如何通过提升第三方资源的效果来提升业务指标。虽然一项之前的研究衡量了增加的广告延迟时间所带来的成本,但这项研究则展示了实际效果提升的价值:

0.5%

提高发布商的收入

2%

增加了广告脚本的提前加载次数

资料来源:Google 内部数据,2019 年 6 月至 7 月。

背景

Google 发布商代码 (GPT) 是 Google Ad Manager 的广告代码植入脚本,用于在网站上请求和呈现展示广告。通过为 GPT 实现简单的 stale-while-revalidate HTTP 标头,GPT 团队能够为其发布商合作伙伴提升 Google 展示广告的速度和效果。同样的技术可应用于任何其他情况下,在这些情况下,尽快加载脚本比加载最新代码更重要。

问题

GPT 会作为引导脚本 gpt.js 部署,其存活时间 (TTL) 很短,只有 15 分钟。这样短的 TTL 可让脚本快速更新或回滚。加载后,gpt.js 会请求并加载其他实现脚本,这些脚本的 TTL 更长。

15 分钟的 TTL 过期后,缓存中的 gpt.js 版本会过时,需要重新验证。以前,该重新验证过程涉及发出同步网络请求,以提取该脚本的最新副本,从而增加第一个广告请求的延迟时间。

解决方案

stale-while-revalidate 属性由 Cache-Control 标头使用,用于定义额外的时间范围,在此时间范围内,缓存可以使用过时资产,同时异步重新验证该资产。这有助于开发者在即时性(立即加载缓存内容)和新鲜度(确保将来使用缓存内容的更新)之间取得平衡。

Google 展示广告案例研究

GPT 团队在 2016 年在 gpt.js HTTP 响应中添加了此 Cache-Control 标头,以便浏览器实现 stale-while-revalidate

cache-control: private, max-age=900, stale-while-revalidate=3600

此设置表示,如果在上一个缓存值之后的 15 到 60 分钟内请求 gpt.js,则系统会使用缓存值来满足请求,即使该值已过时也是如此。同时,系统会在后台发出重新验证请求,以使用新值填充缓存以供日后使用。

Chrome 在版本 75 中面向 99% 的所有流量推出了 stale-while-revalidate,并暂时停用了 1% 的流量,以衡量该功能的影响。GPT 团队记录了这 1% 的流量(实验组)以及启用了该功能的 1% 流量样本(对照组)的指标,以测试 stale-while-revalidate 对广告脚本的有效性。在从 52 亿次 Google 展示广告展示次数的样本中记录指标的 2 周时间里,对照组观察到:

  • 广告展示次数增加了 0.3%。
  • 收入增长了 0.5%。
  • 缩短了广告脚本的早期加载时间(从网页加载开始到广告脚本加载完毕的时间小于 500 毫秒),提高了 2%。
  • 广告脚本总体成功加载率提高了 1.1%。
广告脚本加载次数的百分比变化率与网页加载开始到广告脚本加载之间的时间(毫秒)
资料来源:Google 内部数据,2019 年 6 月至 7 月。

如上图所示,此实验的结果可归因于成功加载广告脚本的次数增加,其中大部分发生在页面加载流程的早期。

在您的网站上实现“stale-while-revalidate”

GPT 团队发现,使用 stale-while-revalidate 对 HTTP 标头进行相对简单的更改,可以提高速度并提升业务指标。如需详细了解如何在您自己的网站上实现 stale-while-revalidate,请参阅使用 stale-while-revalidate 保持内容新鲜一文。

照片由 Kahica 拍摄,选自 Unsplash