Google 如何透過過時的重新驗證方式改善廣告成效

瞭解如何加快第三方資源的載入速度,進而提高收益。

Jonathon Imperiosi
Jonathon Imperiosi

本案例研究說明如何改善第三方資源的成效,進而提升業務指標。先前的研究評估了增加廣告延遲的成本,而這項研究則說明瞭改善實際成效的價值:

0.5%

發布商的收益提升

2%

增加早期廣告指令碼載入作業

資料來源:Google 內部資料,2019 年 6 月至 7 月。

背景

Google 發布商廣告代碼 (GPT) 是 Google Ad Manager 的廣告代碼程式碼,可在網路上要求及顯示多媒體廣告。GPT 團隊為 GPT 導入簡單的 stale-while-revalidate HTTP 標頭,進而改善發布商合作夥伴的 Google 多媒體廣告速度和成效。在其他情況下,如果載入指令碼的速度比載入最新程式碼更重要,也可以使用相同的技術。

問題

GPT 會以引導程式碼 gpt.js 的形式部署,並設定 15 分鐘的短存留時間 (TTL)。這個短 TTL 可讓指令碼快速更新或回溯。載入後,gpt.js 會要求並載入其他實作指令碼,這些指令碼的 TTL 較長。

15 分鐘的存留時間過後,快取中的 gpt.js 版本就會過期,需要重新驗證。先前,這個重新驗證程序會發出同步網路要求,擷取指令碼的新副本,並為第一個廣告請求增加延遲時間。

解決方案

Cache-Control 標頭會使用 stale-while-revalidate 屬性,並定義額外的時間間隔,在該期間內,快取可以使用過時的素材資源,同時素材資源會以非同步方式重新驗證。這有助於開發人員在即時性 (立即載入快取內容) 與新鮮度 (確保日後使用快取內容的更新版本) 之間取得平衡。

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 在廣告指令碼中的成效。在 2 週的期間,我們記錄了 52 億次 Google 多媒體廣告曝光的資料,並在控制組中觀察到以下結果:

  • 廣告曝光次數增加 0.3%。
  • 收益增加 0.5%。
  • 廣告指令碼的早期載入次數增加 2% (從網頁開始載入到完成載入的時間少於 500 毫秒)。
  • 整體廣告程式碼載入成功率提升 1.1%。
廣告指令碼載入次數的百分比變化,相對於從網頁載入開始到廣告指令碼載入的時間 (毫秒)
資料來源:Google 內部資料,2019 年 6 月至 7 月。

如上方圖表所示,這個實驗的結果歸因於成功載入廣告指令碼的次數增加,其中大部分是在網頁載入程序初期發生。

在網站上實作 stale-while-revalidate

GPT 團隊發現,只要透過 stale-while-revalidate 對 HTTP 標頭進行相對簡單的變更,就能提升速度並改善業務指標。請參閱「透過 stale-while-revalidate 保持內容新鮮」一文,進一步瞭解如何在自家網站上導入 stale-while-revalidate

相片來源:KahicaUnsplash 網站上提供