瞭解如何更快載入第三方資源將收益提升。
本個案研究著重說明改善第三方資源成效如何提升業務指標。先前的研究評估增加的廣告延遲費用後,這項研究顯示實際改善成效的重要性:
0.5%
發布商收益升幅
2%
廣告指令碼早期載入量增加
資料來源:Google 內部資料,2019 年 6 月至 7 月。
背景
Google 發布商廣告代碼 (GPT) 是 Google Ad Manager 的廣告代碼指令碼,用於在網路上請求及顯示多媒體廣告。藉由為 GPT 導入簡單的 stale-while-revalidate
HTTP 標頭,GPT 團隊得以為發布商合作夥伴提高 Google 多媒體廣告的速度和成效。同樣的技術也適用於任何其他情況,因為盡快載入指令碼比載入最新程式碼更重要。
問題所在
GPT 是以啟動指令碼 (gpt.js
) 的形式部署,這個指令碼的存留時間 (TTL) 較為縮短 15 分鐘。這個較短的存留時間能讓指令碼迅速更新或復原。載入後,gpt.js
會要求並載入存留時間較長的其他實作指令碼。
當 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
這項設定表示,如果在前一個快取值之後,要求 gpt.js
的時間是在 15 至 60 分鐘之間,則即使要求已過時,系統還是會使用快取的值執行該要求。同時,系統會在背景發出重新驗證要求,以新的值填入快取,以供日後使用。
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 團隊已發現,使用 stale-while-revalidate
稍微變更 HTTP 標頭,就能加快速度並提高業務指標。如要進一步瞭解如何在網站上導入 stale-while-revalidate
,請參閱「更新過時的過時內容」一文。