本案例研究著重說明如何改善第三方資源的效能,進而提升業務指標。先前的研究評估了廣告延遲增加的成本,而這項研究則展現了實際成效提升的價值:
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%。
如圖表所示,這項實驗的結果可歸因於廣告指令碼成功載入次數增加,且大部分發生在載入網頁程序初期。
在網站上導入「過時重驗」機制
GPT 團隊發現,只要對 HTTP 標頭進行相對較小的變更,stale-while-revalidate就能提升速度並改善業務指標。如要進一步瞭解如何在自己的網站上實作 stale-while-revalidate,請參閱「
使用 stale-while-revalidate 保持內容新鮮度」。