2017年までに、典型的なページは数十のサードパーティスクリプトを読み込んでおり、追跡用のスクリプトはユーザーが実際に待っているコンテンツと同じネットワークキューに並んでいた。Firefox Quantum(バージョン57)はネットワークリクエストのスケジューラを書き換え、その変更の一つはTracking Protectionデータベースを用いて、ページがまだ活発に読み込み・描画されている間、追跡ドメインからのスクリプトの読み込みを遅延させた。MozillaのエンジニアJan Bambasはこの手法を「tailing」と呼んだ。

露骨な選択肢はトラッカーを完全にブロックすることだったが、FirefoxにはそのためのTracking Protectionがすでにあり、ブロックは描画やビジネスがそれらのスクリプトに依存しているサイトを壊してしまう。もう一つの明白な選択肢は何もせず、分析や広告のペイロードが実際のコンテンツと競合することを受け入れることだった。Tailingはその中間を取った。何も無効化せず、優先度を下げるだけだった。

追跡ドメインへのリクエストは、サイト自身のサブリソースがまだ読み込み中の間だけ、しかも最大で約6秒間だけ保留された。動的に追加されたスクリプトや非同期で読み込まれるスクリプトは遅延され得た一方、追跡用の画像、XHR、および追跡スクリプトが要求したものは常に遅延された。HTML仕様はダウンロードのスケジューリングと優先順位付けをブラウザに委ねているため、この変更はウェブのルール上合法であり、適切に作られたサイトは表示するものがトラッカーに依存していなかったため機能上の違いを感じなかった。

ページ読み込み性能の向上は、サイト自身が必要とする画像やスクリプトのためにネットワーク帯域幅、I/O、CPUを節約することからもたらされた。目に見えるコストは作りが粗悪なサイトに降りかかった。GoogleのA/Bテスト用スニペットは、www.google-analytics.comからのスクリプトが非表示を解除するまでページを不透明度ゼロで隠すが、これによりページが最大4秒間空白になり得た。またL'Équipeのようなサイトは同期スクリプトからTwitterのAPIを呼び出しており、遅延された非同期スクリプトがまだ存在しないために失敗した。Bambasは、それらのサイトは偶然にしか動作していなかったと主張した。同じ競合状態がプライベートブラウジングやトラッキング保護の下でもそれらを壊していたからだ。

ブロックではなく遅延:追跡ドメインへのリクエストをページ自身のリソースが完了するまで保留し、その後解放する

トラッカーがページの描画に必要とされることはまれであるため、それらを遅延させることでユーザーに見えるものを変えることなく、サイト自身のリソースのために帯域幅、I/O、CPUを解放できる。

ブロックではなく遅延させることで、この機能はHTML仕様の範囲内に収まり、分析や広告の経済性を破壊せず、ただ先送りするだけである。

Tracking Protectionデータベースはすでにサードパーティドメインを分類していたため、スケジューラは新しいリストを構築・維持することなく優先度のシグナルを得た。

壊れたサイトは描画をトラッカーに依存していたか、トラッカーサーバーが高速に応答したからこそ勝てた競合状態に依存していたため、そのリグレッションは誤ったトレードオフではなく実際の脆弱性を露呈させた。

コストを取り除けないときは、スケジュールを組み直す:低価値の作業をユーザーに見える読み込みが完了するまで保留すれば、争うことなく利益の大半を得られる

TailingはFirefox 57(Quantum)に搭載された。Bambasの2017年12月の解説は、Hacker Newsで472ポイント・261コメントのスレッドを呼び、Bleeping ComputerやgHacksによる報道も生んだ。Mozillaが記録したリグレッション、すなわちGoogleのページ非表示スニペットがページを最大4秒間空白にする問題などはBugzillaに送られ、Bambasは影響を受けたサイトは新しいスケジューリングを採用するために修正が必要だと主張した。彼はさらに、より広範な測定はまだ進行中であり、ローカルテストでは向上分がノイズに埋もれていたため、完全な効果はまだ数値化されていないと付け加えた。

出典をたどる

出典

  1. Firefox 57 delays requests to tracking domains Jan Bambas's blog · janbambas.cz ·
  2. Firefox 57 delays tracking domains gHacks Tech News · ghacks.net ·
  3. Hacker News discussion: Firefox 57 delays requests to tracking domains Hacker News · news.ycombinator.com ·