IE9 のハング処理機能
本記事は、マイクロソフト本社の IE チームのブログから記事を抜粋し、翻訳したものです。
【元記事】Hang Resistance in IE9 (2011/4/20 1:24 AM )
IE9は、ハング処理機能に関して現在最も信頼性の高いブラウザーです。
IE の信頼性に関する今回の記事では、IE9 のハング処理機能がどのように設計されているかについて説明します。
IE9 のハング処理機能は、クラッシュしたタブを処理するタブの分離機能と同じように、非応答状態のタブがブラウザーのその他の部分に影響を及ぼさないように設計されています。また、Web ページ、実行時間の長いスクリプト、処理の遅いアドオンを原因とするハングから回復し、中断のないブラウジングを実現する新しいユーザー エクスペリエンスについても詳しく説明します。
さらに、IE9 のハング処理機能と他のブラウザーを比較した競合分析の結果も提示します。IE9 のハング処理機能の実際の動作は、Test Drive デモまたは以下のビデオでご確認いただけます。
IE のハング処理機能を理解する
アプリケーションの場合、ユーザー操作を中断する原因として最も多いのがクラッシュで、その次がハングです。
アプリケーションがハング (フリーズ) すると、ユーザー インターフェイス全体が非応答の状態になります。
ブラウザーのハングもまた歓迎されるものではありません。
IE のこれまでのバージョンでは、タブがハングすると、その他の開いているタブやブラウザー ウィンドウとも対話できなくなっていました。IE9 では、あるサイトを表示している 1 つのタブがハングしても、ブラウザーのその他の部分はハングの影響を受けません。
IE がこれをどのように実現しているか詳しく見ていきましょう。
他のブラウザーと同様、IE のブラウザー フレーム ウィンドウとタブは異なるコンポーネントです。これらの相互通信は共有メッセージ キューを経由して行われています。
タブにあるリンクのクリックや IE ウィンドウのドラッグといった操作をユーザーが実行すると、IE はこれらの操作をメッセージとしてキューに追加します。1 つひとつのメッセージは目的の受信者を持ち、フレーム ウィンドウとタブは一連のメッセージを順番に処理します。
ブラウザーがハングするのは、メッセージ キューでスタックが発生した場合です。
たとえばプラグインが原因でタブが非応答状態になると、そのタブは、そのタブを受信者とする共有キュー内のメッセージすべてを処理することができません。これによってキュー内のその他のメッセージも処理できなくなり、交通渋滞に似た現象が発生します。
ここでやみくもにブラウザー内をクリックしても、それらの操作はメッセージとしてキューに追加されるものの、処理されることはありません。その理由は、ハング状態のタブが現在のメッセージも処理していないためです。
IE9 にはこの交通渋滞を発生させないための仕組みがあります。
IE9 のフレーム ウィンドウは、タブがハングしていないかどうかを周期的にチェックし、ハング状態のタブを検出すると、このタブに対するメッセージをデタッチして一時的な場所に移動します。これによってキューが解放されるため、その他のタブとフレーム ウィンドウは、ハング状態のタブに関係なくメッセージを処理することができます。
ハング状態のタブが再び応答可能な状態になると、このタブは、先ほどのフレーム ウィンドウによるチェックに応答します。
タブが応答状態を回復し、フレーム ウィンドウがこの応答を受信すると、これまでハングしていたタブに対するメッセージがフレーム ウィンドウによってキューに戻され、これらのメッセージをタブが再び処理できるようになります。
IE9 のハング処理機能を使ってもブラウザーのその他の部分がハングしてしまうことがまれにありますが、その場合は Windows によるハング処理が行われます。
この処理内容は IE8 を始めとするその他のブラウザーと同じです。
以下の図を使って、IE9 のハング処理機能が実現するユーザー エクスペリエンスを説明します。
ツール バー、BHO、プラグインの独自のインスタンス、さらに目的の Web ページの表示に必要なスクリプトと HTML コードが 1 つのタブ内で処理されます。
これらの構成要素のいずれかが原因でタブがハングすると、メッセージ キューの詰まりが起き、ブラウザー全体が一時的に非応答状態になります。
フレーム ウィンドウはタブのハングを 3 秒以内に検出し、メッセージをキューからデタッチします。その後、このタブのコンテンツ (オレンジ色の部分) だけが非応答状態になります。その他の構成要素は、この影響を受けることなく正常に動作します。
このエクスペリエンスは、その他のブラウザーおよび IE のこれまでのバージョンとは明らかに異なる強化点であり、これによって IE9 の信頼性と応答性が向上しています。タブの 1 つがハングしていることに気付かないことさえあるかもしれません。
ブラウザー フレームの応答状態が維持される IE9 には、Web ページ、プラグイン、実行時間の長いスクリプト、そしてアドオンを原因とするハングからの回復機能も備わっています。以降のセクションでは、こうしたシナリオのユーザー エクスペリエンスについて説明します。
Web ページとプラグインを原因とするハングからの回復
マイクロソフトでは、ユーザーのブラウジング エクスペリエンスを邪魔しないハング回復機能を設計しました。
Web ページまたは Web ページのプラグインを原因とするハングが発生すると、当然ながらタブのコンテンツは非応答状態になります。ハングが発生したことをすぐに知らせる要素はこれ以外にありません。
ユーザーは別のタブを使ってブラウズを続行することができます。また、Web ページの応答を待ちたくなければ、タブを閉じる、タブを更新する、あるいは別の Web ページに移動することも可能です。
フレーム ウィンドウがハングを検出してからタブの非応答状態が 8 秒間以上続く場合、おそらくハングの状態は永続的なものと考えられます。
こうした場合、かつハング状態のタブのコンテンツを回復したいときのために、ユーザーがこのタブに対して何らかの対話操作を実行することで、IE はこのタブのハング回復通知を表示します。
この通知の時点で、タブ内の Web ページが非応答状態だということが明確になります。さらに IE は、ハングしていることがわかるようにタブのタイトル テキストを暗く表示します。これによって、別のタブを使ってブラウズを続けようと決めた場合に、ハングしているタブがどれであるかがすぐにわかります。
通知の [Web ページの回復] ボタンを押すと、ハング状態のタブのタブ回復プロセスが開始され、処理中のハングに関するエラー レポートが送信されます。
このレポートは、タブのその他のプロセスには影響を及ぼしません。
これまでにも説明したように、ハングの主な原因を特定して対応、修正するには、こうしたエラー レポートが不可欠です。
ハング回復通知が表示された後は、ハング状態のタブ上で以下の操作を実行するとハングのエラー レポートが送信されます。
- タブを閉じる
- タブを更新する
- タブ上で別の Web サイトに移動する
- IE ウィンドウを閉じる
タブがハングから自力で回復した場合は、通知が消えてタイトル テキストが標準の状態に戻ります。
スクリプトを原因とするハングからの回復
実行時間の長いスクリプトも、ブラウザーがハングする原因となります。
IE のこれまでのバージョンでは、一定数の命令を実行してもスクリプトが完了しなかった場合、スクリプトの実行を停止すると共に、実行時間の長いスクリプトを通知するダイアログを表示していました。
当時は汎用のハング検出機能がなかったため、実行時間の長いスクリプトの検出にはこうしたメカニズムを使用する必要がありました。
IE9 のハング処理機能では、命令ベースの検出メカニズムは必要なく、ユーザー エクスペリエンスは大幅に向上されています。また、実行時間の長いスクリプトが原因でタブがハングしても、ブラウザーのその他の部分には影響が及びません。
フレーム ウィンドウがタブのハングを検出すると、アドレス バーの中止ボタン (または Esc キー) を押してスクリプトの実行を停止できます。Web ページはすぐに応答可能な状態に戻り、ページに入力されていたデータも失われることはありません。
ただし IE がスクリプトの実行を停止しているため、Web ページが正常に動作しない可能性があります。
タブの非応答状態が 8 秒間続いた後にタブをクリックすると、実行時間の長いスクリプトの通知が表示されます。
[スクリプトの停止] ボタンを押すと、スクリプトの実行がすぐに停止されます。
その他のユーザー エクスペリエンスの部分については Web ページを原因とするハングの場合と同じです。たとえば、スクリプトが原因でハングしている現在のタブ上で別の Web ページに移動しようとすると、IE はスクリプトの実行を停止して移動の操作に従います。
アドオンを原因とするハングからの回復
アドオン パフォーマンス アドバイザーとハング処理機能の統合によって、IE9 のブラウザー アドオンを原因とするハングからの回復がサポートされています。
これまでにも説明したように (例 1、例 2)、アドオンの種類によっては、IE を起動したり新しいタブを開いたりしたときに初期化に時間がかかる場合があります。
アドオンの読み込みが終わるまでタブのインスタンス化を続行できないため、アドオンの処理があまりに遅いとタブがハングしてしまうことがあります。
その他のハングの場合と同様に、アドオンの処理が遅いことによる影響は、ブラウザーのその他の部分には及びません。
フレーム ウィンドウは、タブのハングを検出した際に、そのタブでアドオンがインスタンス化の最中であるかどうかもチェックします。
インスタンス化の最中である場合、非応答状態のタブ上でクリック操作を実行すると、処理の遅いアドオンの通知 (改良版) が IE によって表示されます。
通知の [アドオンの選択] をクリックすると、 [ アドオンの選択] ダイアログ (改良版) が表示され、現在読み込み待ちのアドオンが表示されます。
ユーザーは、アドオンが読み込まれるまで待つか、読み込み待ちのアドオンを無効化してブラウズを続行することができます。また、現在有効化されているその他のアドオンを無効化することも可能です。
ダイアログで (複数の) アドオンを無効化して [タブの回復] をクリックすると、IE はアドオンに対する変更をコミットしてハング状態のタブを回復します。
この新しい機能によって、パフォーマンスに重大な問題を発生させているアドオンに影響され続けることがなくなりました。
その他のブラウザーが提供するハング処理機能
オペレーティング システムがアプリケーションのハング処理機能を実現しているように、最新のブラウザーにとって、タブに発生したハングの処理機能を提供することは必須の条件です。
ここでは、IE のハング処理機能と回復機能を、現在提供されているその他の主要ブラウザーの最新バージョンと比較した結果を提示します。
ハングの種類 |
IE 9 |
Chrome 10 |
Firefox 4 |
Opera 11 |
Safari 5 |
Web ページによるハング |
|||||
プラグインによるハング |
|||||
スクリプトによるハング |
|||||
アドオンによるハング |
凡例: |
|
ハング処理に完全対応— 1 つのタブにハングが隔離され、ブラウザーのその他の部分には影響が及ばない |
|
ハング処理に一部対応— 1 つ以上のタブにハングが隔離され、ブラウザーのその他の部分には影響が及ばない |
|
ハング処理なし— ブラウザー全体にハングの影響が及ぶ |
ご覧のように、上記の表でテストしたすべてのハングの種類に対する処理機能を持つのは IE9 だけでした。
さらに IE9 は、実行時間の長いスクリプトの停止や処理の遅いアドオンの無効化など、記載されているすべてのハングの種類に対する回復機能を提供しています。
2 番目に多くハング処理機能を提供しているのは Google Chrome でした。
Chrome ではプラグインが別プロセスに隔離されるため、プラグインを原因とするハングの影響が、同じプラグインを Web ページ上でインスタンス化しているすべてのタブに及んでしまいます。また Chrome が提供するハング回復エクスペリエンスも IE9 とは少し異なり、ハングが 1 分間続いた場合に、ページを閉じるか待機するかを選択するモーダル ダイアログを表示するというものになります。
残りの 3 つのブラウザーはハング処理機能を搭載していません。
ただし Opera についてはスクリプトが原因のハングに強い設計を持っています。Opera はスクリプトの実行を別スレッドで実行するため、実行時間の長いスクリプトがブラウザー自体を停止させることはありません。その代わりにスクリプトは、すべてのタブとウィンドウのブラウジング パフォーマンス全体の影響を強く受けます。また Opera のアドオンはスクリプト ベースなので、アドオンを原因とするハングに対しては、スクリプトを原因とするハングの場合と同じ処理機能が受け継がれています。
今後の取り組み
IE9 は、Web ページ、プラグイン、スクリプト、またはアドオンを原因とするタブのハングに対する包括的な処理機能を持つ唯一のブラウザーです。
これらのハングがブラウザーのその他の部分にまで影響を及ぼすことはありません。また IE9 は、これらのハングから回復するための機能も備えています。
IE におけるクラッシュに対する信頼性強化とアドオン エコシステムの信頼性強化が反映された IE9 は、これまでの IE のバージョンの中で最も信頼性が高いものとなっています。
Web およびアドオンのエコシステムは、これからの数か月でさらに進化を遂げます。また Windows エラー報告から入手したレポートに基づき、クラッシュとハングの主な原因を特定し対応していく予定です。
これらの修正は累積的な更新プログラムを通して提供されるため、IE9 の高い信頼性を誰もが活用することができます。
IE9 プレリリース版のご利用に改めて感謝を申し上げます。また、ぜひフィードバックとエラー レポートをお送りいただき、製品サイクル全体を通したさらなる信頼性向上に役立てさせていただきたいと考えています。IE の信頼性強化について新しいご報告ができることを楽しみにしています!
—Herman Ng、プログラム マネージャー、Internet Explorer Fundamentals