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 的形式部署,存留時間 (TTL) 為 15 分鐘。這個較短的 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 月。

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

在網站上導入「過時重驗」機制

GPT 團隊發現,只要對 HTTP 標頭進行相對較小的變更,stale-while-revalidate就能提升速度並改善業務指標。如要進一步瞭解如何在自己的網站上實作 stale-while-revalidate,請參閱「 使用 stale-while-revalidate 保持內容新鮮度」。