この事例紹介では、サードパーティ リソースのパフォーマンスを改善することでビジネス指標を向上させる方法について説明します。以前の調査では、広告のレイテンシの増加によるコストを測定しましたが、今回の調査では、実際のパフォーマンスの改善による価値を示します。
0.5%
パブリッシャーの収益の増加
2%
早期の広告スクリプトの読み込みの増加
出典: Google 内部データ、2019 年 6 月~ 7 月
背景
Google パブリッシャー タグ(GPT)は、Google アド マネージャーの広告タグ設定スクリプトで、ウェブでディスプレイ広告をリクエストしてレンダリングします。GPT チームは、GPT に stale-while-revalidate HTTP ヘッダーを実装することで、パブリッシャー パートナー向けの Google ディスプレイ広告の速度とパフォーマンスを改善することができました。この手法は、最新のコードを読み込むよりもできるだけ早くスクリプトを読み込むことが重要な他のシナリオにも適用できます。
問題
GPT はブートストラップ スクリプト gpt.js としてデプロイされ、有効期間(TTL)は 15 分に設定されています。TTL が短いため、スクリプトを迅速に更新またはロールバックできます。読み込まれると、gpt.js は追加の実装スクリプトをリクエストして読み込みます。これらのスクリプトの TTL は長くなります。
15 分の TTL が切れると、キャッシュ内の gpt.js のバージョンが古くなり、再検証が必要になります。以前は、この再検証プロセスでは、同期ネットワーク リクエストを行ってスクリプトの新しいコピーを取得し、最初の広告リクエストにレイテンシを追加していました。
ソリューション
stale-while-revalidate 属性は Cache-Control ヘッダーで使用され、アセットが非同期で再検証されている間、キャッシュが古いアセットを使用できる追加の時間枠を定義します。これにより、デベロッパーは即時性(キャッシュに保存されたコンテンツをすぐに読み込む)と
鮮度(キャッシュに保存されたコンテンツの更新が今後使用されるようにする)のバランスを取ることができます。
Google ディスプレイ広告の事例紹介
GPT チームは、ブラウザが stale-while-revalidate を実装することを想定して、2016 年に gpt.js HTTP レスポンスにこの Cache-Control ヘッダーを追加しました。
cache-control: private, max-age=900, stale-while-revalidate=3600
この設定は、前のキャッシュ値から 15 ~ 60 分後に gpt.js がリクエストされた場合、古い値であってもキャッシュ値を使用してリクエストを満たすことを意味します。同時に、バックグラウンドで再検証リクエストが行われ、今後使用するためにキャッシュに新しい値が入力されます。
Chrome はバージョン 75 で stale-while-revalidate をすべてのトラフィックの 99% にロールアウトし、影響を測定するために 1% のトラフィックで一時的に機能を無効にしました。GPT チームは、広告スクリプトの stale-while-revalidate の有効性をテストするために、この 1%(テストグループ)と、機能が有効になっているトラフィックの 1% サンプル(対照群)の指標を記録しました。52 億件の Google ディスプレイ広告インプレッションのサンプルサイズから 2 週間にわたって記録された指標では、対照群で次のことが確認されました。
- 広告インプレッション数が 0.3% 増加。
- 収益が 0.5% 増加。
- 早期の広告スクリプトの読み込みが 2% 増加(ページの読み込み開始から 500 ミリ秒未満)。
- 広告スクリプトの読み込み成功率が全体で 1.1% 増加。
グラフに示すように、このテストの結果は、広告スクリプトの読み込み成功率の増加に起因すると考えられます。そのほとんどは、ページの読み込みプロセスの早い段階で発生しています。
サイトに stale-while-revalidate を実装する
GPT チームは、stale-while-revalidate を使用して HTTP ヘッダーに比較的小さな変更を加えることで、速度を向上させ、ビジネス指標を改善できることを確認しました。独自のサイトに stale-while-revalidate を実装する方法について詳しくは、
stale-while-revalidate で最新の状態を維持する
をご覧ください。