Hebikuzure's Tech Memo

2011年3月21日

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

Filed under: IE Blog — hebikuzure @ 9:39 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 ではパフォーマンス向上のためにネットワーク関係の動作が色々と最適化 (変更) されています。DNS の先読み (事前解決) やプロキシ関係の動作変更、リクエストの並列化などは特に企業内のネットワーク管理者にとっては、ネットワーク全体の最適化を考える上で重要と思われます。今回はこうした IE9 のネットワーク パフォーマンスに関連する動作変更についてのIE Blog 記事の前半を私訳しました。後半も引き続き訳して公開しますので、併せてご参照ください。

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


Internet Explorer 9 のネットワーク パフォーマンス向上

2011年3月17日 午前10時03分

ブラウザーのネットワーキング サブシステムはハイ パフォーマンスの Web エクスペリエンスを提供するために決定的に重要なコンポーネントです。本日の記事では、これについていくつかの実際の計測値に基づいて、“高速” なネットワーク環境であっても、ネットワーク時間はページの読み込み時間に関係する他のサブシステムに対して大きな位置を占めている事を示したいと思います。次に、Web ブラウザーがどのようにネットワークを利用するのかについて簡単に解説し、高速なページ読み込みのため Internet Explorer 9 で実現された向上についての概要を示します。

現実のブラウジング パフォーマンスとネットワーキング

昨年、私たちはページ読み込み時間の全体がサーバーからコンテンツを取得するための時間にどれだけ関係しているのかを計測するため、主要なサイトについて調査を行いました。テストは “高速” と考えられる環境 – Intel Core2 2.4 ギガヘルツと 20MB/秒のケーブル モデムに接続する 802.11N ネットワーク – で実行しました。それぞれのサイトについて 4 回の測定で、ページ読み込み時間 (about:blank からトップ レベルのドキュメントの完了まで) を、PLT1 (キャッシュがクリアされた状態) と PLT2 (キャッシュ済みの状態) の両方について、“現実的な” 状況と “理想的な” 状況 (ネットワーク時間が 0 になるよう全てのリソースがローカル コンピューター上のプロキシから返される環境) で計測しました。

6 つの代表的なサイトでの結果を以下のグラフでそれぞれのサイトごとに示しました。それぞれの円グラフは “非ネットワーク” 時間 (赤) と “ネットワーク” 時間 (青) の比率を示しています。外側の円は最初にページを読み込んだ際 (“キャッシュがクリアされた状態”) を、内側の円は二回目の訪問 (“キャッシュ済みの状態”) を示しています。

ご覧になれるように、幅広いネットワーク パフォーマンスの比率が見られます。キャッシュを良く利用しているサイト (具体的には三列目のサイト) では、大半のコンテンツがブラウザーのキャッシュにローカルにキャッシュされているため、PLT2 ではネットワークにごく少しの時間しか費やされていません。他のサイトでは、PLT2 の全体の読み込み時間は PLT1 より速くなっていますが、単一のネットワーク リクエストであっても相対的に長時間を要するため、ネットワーク時間が依然としてページ読み込み時間中最大の要素になっています。

これらの結果は、“高速” なネットワークであっても、ネットワーク時間はページ読み込み時間で支配的である事を示しています。最初のページ読み込みでは、ダウンロードはページ読み込みの 73% に上っており、その後の再読み込みでもページ読み込み時間の 63% はリソースの読み込み待ちに費やされています。

別の言い方をすれば、これらのサイトの最初の読み込みでは合計 17 秒かかっていましたが、ダウンロード時間を除くと 4.6 秒になります。再読み込みでは、これらのサイトは 6.7 秒で読み込まれ、ダウンロード時間を除いた時間は 2.5 秒でした。

以上のようにネットワーク パフォーマンスの “現実の” インパクトについて見る事ができましたので、ネットワーク遅延の原因について確認していきましょう。

ブラウザーのネットワーキング入門: どこがボトルネックなのか

ブラウザーが Web サイトを読み込むごとに、その動作の背後で複雑な手順が実行されています。この手順について簡単にまとめると以下のようになります:

コンピューターが Web プロキシ環境下で実行されていない場合は、ブラウザーは入力されたホスト名 (例えば http://www.microsoft.com) をネットワーク アドレス (例えば 65.55.12.249) に変換するため DNS 検索をネットワークを使って実行します。ブラウザーは目的のアドレスに対して TCP/IP コネクションを確立する必要があります。

コンピューターが Web プロキシ環境下で実行されている場合は、ブラウザーは最初にプロキシを検索する必要があります。プロキシはブラウザーの設定で直接指定されているか、Web Proxy Auto-Discovery Protocol (WPAD) と呼ばれるプロセスを通じて検索されます。プロキシのホスト名が確認されると、ブラウザーは DNS 検索を使ってプロキシのホスト名をネットワーク アドレスに変換します。その後ブラウザーはプロキシ サーバーとの間にネットワーク コネクションを確立します。

URL が安全な接続 (HTTPS) の場合は、SSL または TLS のハンドシェイクが必要となり、サーバーから示された証明書の検証が必ず行われます。その結果、証明書チェインに含まれる証明書のいずれについても無効になっていない事を確認する (“失効確認” と呼ばれる動作) ための、証明機関に対する一つまたは複数の追加のネットワーク リクエストが行われます。

接続の確立に成功したら、ブラウザーは HTTP リクエストをサーバーに送信します。リクエストを受信したサーバーは、リクエストされたファイルを読み込み (または生成) して、クライアントに送信を開始します。ドキュメントが HTML ファイルであれば、通常 Web ページを完全に表示するために読み込みが必要な別のリソース (例えばイメージ、スクリプト、スタイルシート) への参照が含まれています。ページ内のそれぞれのリソースへの参照ごとに、ブラウザーは必要なリソースのダウンロードのために前述の複数の手順を繰り返します。

こうした操作の多くは直列的 (シリアル) に実行される必要があります (例えば最初に DNS 参照を行って IP アドレスを取得しなければ TCP/IP 接続を確立できません) ので、一つの操作の遅延はページの読み込み時間を劇的に増加させます。

一部の場合、遅延のリスクを軽減するために操作を並列化 (パラレル化) したり、キャッシュしたりできます。Internet Explorer 9ではこの記事の後半で解説するように、パフォーマンスを向上するためこの両方のテクニックを使っています。

DNS 事前解決によるネットワーキングの高速化

ドメイン ネーム システム (DNS) によりクライアント ブラウザーはホスト名をネットワーク アドレスに変換できます。このプロセスでは数ミリ秒から数秒を要します。最近の研究ではアメリカでの中央値は凡そ 150ミリ秒であるとされていますが、この時間には大きな幅があります。ブラウザーはリモートのアドレスを確定しなければネットワーク接続を確立できませんから、DNS はネットワーク パフォーマンス上の最初のボトルネックです。

Internet Explorer 9 には DNS パフォーマンスを向上させるための三つの最適化が含まれています。これらの最適化は、複数の DNS リクエストが並列化できるという事実に基づいています。

アドレスバー DNS 事前解決

アドレスバーに 3 文字目が入力されたところで、Internet Explorer はドロップダウン リストにある上位 5 つのホスト名の DNS 解決を発行します。これらの名前解決の結果は、後から素早く再利用できるようローカル オペレーティング システムのキャッシュに蓄積されます。この方法により、上位のサイトに移動した場合ブラウザーは一歩先んじたスタートを切り、DNS の結果が返るのを待つ時間を節約できます。

訪問済みサイトでの投機的な事前解決

ページを訪問すると、Internet Explorer 9 はページによって利用されたコンテンツのダウンロードに利用されたホスト名のリストを、ページ履歴の項目に関連付けます。

例えば IE Blog を読み込むと、HTML では 5 つの他のサイト (i.msdn.microsoft.com, cdn-smooth.ms-studiosmedia.com, go.microsoft.com, ieblog.members.winisp.net, and silverlight.dlservice.microsoft.com) を参照します。

Internet Explorer 9 はこれら 5 つのホスト名を、履歴の IE Blog の項目に記録します。その後のブラウザー セッションで IE Blog に移動すると、Internet Explorer は blogs.msdn.com サーバーへの接続の確立と並行して、これら 5 つのホスト名の DNS 解決リクエストを直ちに発効します。これによりブログの HTML がサーバーから返ってきた時点で、ページに埋め込まれたリソースのために必要なネットワーク アドレスはローカルの DNS キャッシュに含まれています。

ページ始動の事前解決

Internet Explorer は Web 開発者が LINK REL=PREFETCH 要素で指定したホスト名をすべて解決します。例えば、以下のようなマークアップでは:

<link rel="prefetch" href="http://www.example.com/someresource.htm"&gt;

…Internet Explorer は http://www.example.com の DNS 解決を開始します。これにより、www.example.com への接続が後で必要になった場合、DNS 参照は既に行われており、ブラウザーはアドレスの解決を待たずに直ちにサーバーへの接続を開始する事ができます。

プロキシの改善によるネットワーキングの高速化

多くの企業ユーザーは Web のブラウズにプロキシ サーバーを利用するよう構成しており、プロキシはネットワーク パフォーマンスに影響を与えます。そのため、プロキシが必要となる環境のネットワーク パフォーマンスの向上のために二つの大きな変更を行いました。

第一に、Internet Explorer のプロキシ識別プロセスを、タブ プロセスから単一のフレーム プロセスに移動しました。これにより Web Proxy Auto-Discovery (WPAD) 機能の動作 (これには数十ミリ秒から数秒かかります) が、どれだけの数のタブを開くかにかかわらず、ブラウザー プロセスで 1 回だけになります。これにより同時にある程度のCPU 時間とタブ プロセスごとに 500 キロバイト位のメモリーも節約できます。プロキシ識別の向上は、新しいブラウザー タブでサイトを開く際に特に顕著な効果があります。

第二に、Internet Explorer 9 はプロキシごとの接続制限数を 12 に増加させています。これによりブラウザーは Web プロキシを利用する際 6 接続に制限されていた IE8 に比べてより多くのダウンロードを並行して行う事ができるようになりました。ブラウザーのホスト単位の接続数は 6 に制限されていますが、多くのサイトは複数のドメインからのリソースを利用しているので、このプロキシごとの接続制限数の増加にはメリットがあります。

(つづく)

1件のコメント »

  1. […] 昨日の投稿に引き続き、Internet Explorer 9 の IE9 のネットワーク パフォーマンスに関連する動作変更についてのIE Blog 記事の後半を私訳しました。バックグラウンドでのコネクション確立やイメージの先読みなど、ネットワーク管理者にとって考慮すべき動作変更もあります。またキャッシュ動作の変更についても要注目でしょう。 以下の文章は IE Blog の 3/17 の記事 Internet Explorer 9 Network Performance Improvements の後半を hebikuzure が私的に試訳したものです。翻訳については Microsoft Corporation および日本マイクロソフト株式会社とは無関係に hebikuzure が公開情報に基づき独自に行ったものであり、この文書の内容についての文責は公開者である hebikuzure にあります。翻訳の内容および技術的内容については正確を期すよう十分な注意を払っておりますが、誤りや不正確な部分が含まれている可能性がありますので、本文書を利用される際には原文も併せてご確認ください。 […]

    ピンバック by IE Blog: Internet Explorer 9 のネットワーク パフォーマンス向上 (その2) « Hebikuzure's Tech Memo — 2011年3月22日 @ 4:14 PM


RSS feed for comments on this post. TrackBack URI

コメントを残す

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

WordPress.com ロゴ

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

Twitter 画像

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

Facebook の写真

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

Google+ フォト

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

%s と連携中

WordPress.com Blog.

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