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%。
  • 早期广告脚本加载次数增加 2%(从网页加载开始算起,不到 500 毫秒)。
  • 广告脚本总加载成功率提高了 1.1%。
。 <ph type="x-smartling-placeholder">
</ph> 广告脚本加载次数与从网页加载开始到广告脚本加载所经历的时间(毫秒)的变化百分点
资料来源:Google 内部数据,2019 年 6 月至 7 月。

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

在您的网站上实现过时重新验证

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

照片由 Kahica 拍摄于 Unsplash 网站