ニュース

Facebook、サーバーへの静的リソース要求を60%削減、Google Chrome 56では再読み込みが28%高速化

ブラウザー再読み込み時のキャッシュ技術を改善

 Facebookは26日、Googleとの2年間の協力によりウェブブラウザーのキャッシュ技術を改善し、サーバーへの静的リソース要求を60%削減し、Google Chrome 56ではウェブページの再読み込みを28%高速化したと発表した。

 ウェブブラウザーからの再確認リクエストが効果的に排除することで、Google ChromeやFirefoxにおいて、サーバーのディスクから読み込まれて余分なコードを実行せずに提供されるファイル「静的リソース要求」が60%削減され、結果としてページの読み込み時間が大幅に短縮されたという。

 ウェブページを一度読み込むと、ファイルがローカルにキャッシュされるが、ブラウザーでウェブページを読み込むたびに、ロゴの画像やJavaScriptなどのサブリソースが再検証される。通常は、HTTPサーバー側で不要なダウンロードを停止するために有効期限を設定するが、期限が切れても再利用可能かをブラウザーが問い合わせるバリデーション(検証)処理を行う。このとき、ブラウザーでは、キャッシュデータが最新かどうかを確認する条件付き要求を送信。URLで指定されたコンテンツが変更されていなければ、304(Not Modified)が返される。

 Facebookでは、画像やJavaScriptといったコンテンツのファイル名にハッシュ値を用い、1年間を有効期限としている。URLは変更されないため、条件付き要求に対してはすべて304を返しているという。

 しかし、ウェブブラウザーで再読み込み(リロード)を行った際には、ページの有効期限が切れていなくとも、ページ上のすべてのサブリソースを再検証する。これにより、すべてのサブリソースがサーバーとブラウザーの間を往復する。Facebookのようにコンテンツのファイル名とURLが変更されないウェブページでは、このプロセスは不要となる。

 この条件付き要求が、Chromeでは他のブラウザーと比べて多く、POSTリクエストからロードされたページでは、すべてのリソースを再検証していたという。Facebookのようなウェブサイトでは、ログインプロセスの一環としてPOSTリクエストが使用されるため、そのたびにすべてのリソースが再検証されていた。これを修正することで、Chromeからの条件付き要求は24%にまで減少したという。また、Chromeでは、同じURLを読み込む際に、すべてリロードとして扱われていた。

 リロードボタンの再確認動作への変更はウェブの長年の設計に対する変更となるが、Facebookの統計では、多くのユーザーにはこのボタンが使われていないという。Chromeの開発チームは、すべてのキャッシュされたリソースに対して、こうした変更を適用。その結果、Chrome 56ではウェブページの再読み込みが28%高速化された。

 リソースの再検証については、FacebookがMozillaに伝え、Firefox 49からは、一部のリソースに新しいキャッシュコントロールヘッダーが追加された。これにより、ブラウザーでリソースの再検証を行わないようになり、Facebookへのリクエストが高速化されたとのことだ。

 Googleでは、「ユーザーは一般的にページが壊れているか内容が古くなったときに、再読み込みを行う」とし、ウェブブラウザーの再読み込み動作について、「ページ破損が一般的だった時代に設計されたが、ウェブページの品質が向上した現在では、キャッシュされたリソースの再利用を最大化するように再読み込み動作を簡略化することで、低遅延とともにバッテリー消費も削減する」としている。