Hebikuzure's Tech Memo

2011年3月22日

IE Blog: Internet Explorer 9 のネットワーク パフォーマンス向上 (その2)

Filed under: IE Blog — hebikuzure @ 4:13 PM

Internet Explorer 9 Network Performance Improvements
http://blogs.msdn.com/b/ie/archive/2011/03/17/internet-explorer-9-network-performance-improvements.aspx


昨日の投稿に引き続き、Internet Explorer 9 の IE9 のネットワーク パフォーマンスに関連する動作変更についてのIE Blog 記事の後半を私訳しました。バックグラウンドでのコネクション確立やイメージの先読みなど、ネットワーク管理者にとって考慮すべき動作変更もあります。またキャッシュ動作の変更についても要注目でしょう。

以下の文章は IE Blog の 3/17 の記事 Internet Explorer 9 Network Performance Improvements の後半を hebikuzure が私的に試訳したものです。翻訳については Microsoft Corporation および日本マイクロソフト株式会社とは無関係に hebikuzure が公開情報に基づき独自に行ったものであり、この文書の内容についての文責は公開者である hebikuzure にあります。翻訳の内容および技術的内容については正確を期すよう十分な注意を払っておりますが、誤りや不正確な部分が含まれている可能性がありますので、本文書を利用される際には原文も併せてご確認ください。


Internet Explorer 9 のネットワーク パフォーマンス向上 (つづき)

(承前)

並列化によるネットワーキングの高速化

DNS 事前解決のセクションで説明したように、より多くの動作を並列化する事は全体のパフォーマンスを改善する重要な方法です。ブラウザーの動作のうちのいくつかの部分は本質的にシーケンシャルではなく、複数のスレッドで同時に動作させる事で時間を節約できます。

例えば、事実上すべてのサイトは最終的に一つのホスト名に対して複数の HTTP 接続を行うので、最初の接続が確立された際に “バックグラウンド” の接続を開始しておけば時間を節約できるはずです。このバックグラウンドの接続は、最初の接続が利用可能になるのを待たずに次の HTTP リクエストで利用可能となり、新しい接続を開始するための遅延なしに “ジャスト イン タイム” の接続が行えます。一つのホストに対して一つだけバックグラウンドの接続が開始され、この改善によりページの読み込み時間が数十から数百ミリ秒節約できます。

次に、接続のハンドリングに関して特定の状況で行われるブロック動作がありました。これはサーバーに対して複数の (例えば 3) 接続が開かれている際、ホストごとの接続数の上限である 6 に達しておらず正常に接続が開始できるはずであるのに、サーバーへの別の接続 (4 番目の接続)が、先行するリクエストが完了するまで遅延されるという動作です。動作の並列化を進めるため、この制限は削除されました。

最後に、イメージ ファイルのダウンロードを開始するための先読みダウンローダーが有効になったため、イメージのダウンロードのリクエストがネットワークに対してより高速に行える事を確認できました。HTML5 仕様のサポートにおいては、空のソースのイメージ (例えば <img src=”” /> のような) でネットワークへのリクエストが発生しないよう、イメージのダウンロードに関するコードを変更しました。

キャッシュ機能の拡張によるネットワーキングの高速化

もちろん、ネットワーク パフォーマンスを優れたものにする最も効果的な方法は、ネットワーク時間全体を減少させる事です。インターネット一時ファイル (Temporary Internet Files) のキャッシュは一度ダウンロードしたコンテンツを、ネットワーク越しに再ダウンロードする事なく利用できるようにします。私は昨年の夏、ブラウザーがキャッシュをより効率的に利用するための数々のキャッシュに関連した IE9 での改善について説明しています。本日は、これらの記事を踏まえて、キャッシュ機能に関するその他の拡張について説明します。

キャッシュ サイズ

Internet Explorer 6, 7, および 8 では Web コンテンツのキャッシュ サイズが既定ではディスク容量の 1/32 に制限されており、さらに IE7 と IE8 では既定のサイズは 50 メガバイトの上限が設けられていました。現実的には現在利用されているすべてのハード ディスクは 1.6 ギガバイトより大きいので、IE7 と IE8 のほとんどすべてのユーザーは 50 メガバイトのコンテンツ キャッシュの上限でブラウジングしていた事になります。

Internet Explorer 7 の既定の 50 メガバイトのキャッシュ サイズは、Windows Vista のタイムフレームの分析によりブラウザーのキャッシュがヒットする割合はキャッシュのサイズの増加により顕著には向上しない事が分かったために導入されています。

IE9 では、キャッシュ サイズの増加がヒット率の改善にほとんど寄与しないという驚くべき発見についてさらに研究するため、私たちのキャッシュ動作についてより詳細に調査しました。そこで私たちは、IE が何かをキャッシュ可能と判断し、またキャッシュを削除するアルゴリズムの動作に関連して、機能的な問題が多数ある事を発見しました。こうした問題を修正したところキャッシュ サイズの増加がより良いヒット率に結びつくようになったため、既定のキャッシュ サイズがより大きなサイズとなるよう、既定のサイズ決定のアルゴリズムを変更しました。

Internet Explorer 9 では既定のキャッシュ サイズは全体のディスク容量の 1/256 に制限されており、併せて 250 メガバイトの既定の上限が設けられています。この新しい割合は、小サイズのソリッド ステート ディスク (SSD) を持つローエンドのネットブックが (相対的に) 巨大なキャッシュにより影響を受けず、かつ大きなディスクを持っているデスクトップでは IE8 に対して 500% 大きくなるように設定されています。16 ギガバイトより小さなディスクでは既定のキャッシュ サイズが IE8 の50 メガバイトから IE9 では 64 メガバイトに増加します。64 ギガバイトより大きなディスクでは既定の上限の 250 メガバイトに設定されます。どのバージョンの Internet Explorer でも、ツール > インターネット オプション > 全般 > 閲覧の履歴の設定ダイアログ ボックスで、(8 メガバイトから 1 ギガバイトまでの範囲で) キャッシュ サイズの上限を手動で調整できます。

インターネット一時ファイル (Temporary Internet Files) が十分な空き領域を持つ大容量のディスクに置かれているのであれば、より大きなサイズのキャッシュにより恩恵が受けられるのではないかとお思いでしょう。これは確かに正しいのですが、調査の結果、上限値を 250 メガバイトより増大させても特定のブラウジング パターンでしか効果が得られない事が示されています。重要な点は、キャッシング システムで保持されるのは、内部的に凡そ 60,000 オブジェクトに制限されている事です。キャッシュのサイズとダウンロードしたリソースのサイズによっては、サイズの制限より先にオブジェクト数の制限に当たります。

技術ノート: Internet Explorer は二つのキャッシュを保持します。一つは保護モード (インターネット ゾーンと制限付きゾーン) で、もう一つは保護モード外 (イントラネット ゾーン、信頼済みサイト ゾーン、ローカル コンピューター ゾーン) で利用されます。それぞれのキャッシュごとに制限と上限が設定されていますので、キャッシュで利用される最大のディスク スペースの合計は、個々の制限の二倍になります。

キャッシュの削除

前述の通り、IE8 以前のキャッシュ削除アルゴリズムを分析したところ改善の余地が大きい事が分かっています。この分析の結果、Internet Explorer 9 のためにキャッシュ削除メカニズム (キャッシュ スペースを空けるため価値の低い項目を削除します) を大幅に書き換えました。新しいキャッシュ削除メカニズムは価値のある項目 (再利用される可能性の高いキャッシュ) を保持し価値の低い項目を削除するよう大幅に改善されました。

Internet Explorer のキャッシュ削除メカニズムはキャッシュの上限 (サイズまたはオブジェクト数) に到達すると起動します。その目的はキャッシュ内の価値の低い 10% (サイズによる) のオブジェクトを削除する事です。これはキャッシュ内のオブジェクトを列挙する事で動作します。最初のパスでは各オブジェクトに 0 から 66,000 のスコアを割り振ります。二回目のパスでは下位 10% のスコアにランクされた項目を削除します。

IE9 では最も価値の高い項目が確実に保持され、価値の低い項目が確実に削除されるよう、スコアの計算方法が大幅に改善されました。

66,000 ポイントの全体の内、40,000 ポイントはそのリソースがどれだけ最近に利用されたかにより決定されます。20,000 ポイントはそのリソースがどれだけ頻繁に利用されているかによって決められ、6,000 ポイントはリソースの更新期限が過ぎた後で条件付き再評価が行える検証情報 (Last-Modified や ETag のような HTTP レスポンス ヘッダー) の存在により決定されます。

さらに MIME タイプも計算に利用しました。スクリプト、CSS、HTML/XHTML リソースは得点の全てが利用されますが、他のリソース タイプ (例えばイメージやオーディオなど) は割り当てられた特典の半分しか利用されません。これによりページ読み込み時間に大きな影響のあるリソースが、影響の低いリソースに比べてキャッシュ中で長生きできるようになりました。

複数回利用されたキャッシュ項目は再利用ポイントが増加します。最大で 10,000 ポイントを獲得できますが、再利用は 12 時間以上の間隔で行われなければなりません。これにより短期間で頻繁に再利用されるようなリソース (例えば稀に訪問するようなサイトをブラウズした場合など) が、長期間にわたり頻繁に再利用されるリソース (例えば毎日訪問するサイトのスクリプトなど) と同じような得点を与えられる事が無いようになっています。

検証情報を持っている項目は検証ポイントを獲得しますが、検証の最大の効果はリソースの更新期限が経過した後にあります。有効期限付きでかつ検証情報が無いリソースの得点は 0 ポイントになります (再利用されないか再検証されないためです) が、検証情報を持つリソースではスコアの 70% が残ります。検証情報のある有効期限の過ぎたリソースは、キャッシュされたリソースが最新であるかブラウザーが簡単に再チェックできるため、スコアの大半が残るのです。再チェックの際にサーバーは、キャッシュされたコピーを再利用してよい事を示す少量の HTTP:304 レスポンス (ボディ無し) を返す事ができます。

キャッシュ削除メカニズムはその他のいくつかの特別な状況にも対応しています。例えば、どのようなコンテンツもダウンロードから 10 分間は削除されません。またキャッシュ サイズを超えるリソース (例えば 4 ギガバイトの ISO ファイルのダウンロード) は、ダウンロードが正しく行えるよう一時的に削除の対象外になります。

コンテンツ フィルタリングによるネットワーキングの高速化

Internet Explorer 9 には新たに追跡防止と ActiveX フィルターの機能が搭載されています。いずれの機能も不要なコンテンツのダウンロードと実行を防ぐ事によりブラウザー パフォーマンスを全体として向上させます。例えば、ある人気があるニュース サイトを読み込む際、ActiveX フィルターおよび一般的な追跡防止リストを一つ有効にすると、ページの読み込みが著しく高速化します:

HTTP リクエスト数 送信バイト数 受信バイト数 ページ読み込み時間
フィルタリング無効 168 98.5k 1.9M 7.5 秒
フィルタリング有効 138 71.7k 1.6M 3.6 秒

ブラウザーがページの表示に重要ではないコンテンツのダウンロードと実行を行わずに済むため、ページ読み込み時間は 50% 以上向上します。

まとめ

ご覧になったように、私たちは世界最速のブラウザーを作るという私たちの技術的目標を達成するため、Internet Explorer のネットワーク パフォーマンスの改善について幅広い取り組みを行ってきました。もちろん、利用しているネットワーク接続の速度は引き続き重要な要素ですし、Web 開発者はパフォーマンスのためのベスト プラクティスに従うべきでしょう。しかし IE9 のネットワーク パフォーマンスの改善は幅広い範囲の Web ページの読み込み時間を大幅な高速化するのに役立つでしょう。

—Eric Lawrence

コメントする »

まだコメントはありません。

RSS feed for comments on this post. TrackBack URI

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

WordPress.com Blog.

%d人のブロガーが「いいね」をつけました。