現在地 HOME > 掲示板 > IT6 > 899.html ★阿修羅♪ |
|
Tweet |
Windowsユーザーのためのワンポイント・レッスン 第50回 FirefoxとIEの違いを考える【IT_Pro】
http://itpro.nikkeibp.co.jp/members/ITPro/ITBASIC/20041126/153116/
[2004/11/27]
豊田 孝
この連載のほかの回を読む
Mozilla Japanは,先日,Webブラウザ「Firefox」を一般公開しました。このブラウザはMicrosoftのInternet Explorer(IE)よりも軽量で効率的なWebブラウジング機能を搭載しているといわれています。そこで今回は,IEとFirefoxを比較しながら,効率的なWebブラウジングを支える「軽量化」の意味を考えてみることにします。
Firefoxをインストールする
2004年11月27日現在,Firefoxの最新バージョンは1.0であり,Mozilla Japanのサイトからダウンロードできます。ダウンロードするファイルの総量は4.7MB程度ですから,平均的なインターネット接続環境の場合,ダウンロード自体の負担は軽いといってよいでしょう。
ダウンロードしたファイルをダブルクリックすると,インストールが始まります。インストールの過程では,「お気に入り」や「クッキー」などの情報を既存ブラウザから引き継いでくれます。インストール処理は短時間で完了し,システムの再起動も要求されません。それでは,Firefoxの軽量化を次の2つの視点から考えてみることにします。
・ページ・フォールト総計
・スレッドの動き
ページ・フォールトとは,メモリーの容量が不足したときに,メモリー内のコードの一部をハード・ディスク(外部メモリー)に追い出し,一時的に空きメモリー領域を作り出すWindows機能です。スレッドとは,ここでは,プログラムの実行単位と考えてください。それでは、Firefoxの軽量化の説明に入ります。
図1●Firefoxのページ・フォールト情報
図2●IEのページ・フォールト情報
図3●Firefoxのスレッドの動き
図4●IEのスレッドの動き
Firefoxのページ・フォールト総計を調べる
ご承知のように,内部メモリーとハード・ディスクの間でデータの移動が多発すると,プログラムのパフォーマンスは低下します。次の2つの画面をご覧ください。図1[拡大表示]はFirefoxのページ・フォールト情報,図2[拡大表示]はIEのページ・フォールト情報をそれぞれ示しています。
この2つの画面は,FirefoxとIEをそれぞれ個別に起動した直後に,こちらからダウンロードできるProcess Explorerのバージョン8.52で取り出しています。Process ExplorerはWindowsシステム内で動作しているプロセスの特徴を監視する高度なユーティリティですが,今回は,Process Explorerの機能の詳しい説明は省略します。
2つの画面を比較してみると分かりますが,ページ・フォールト総計だけを見ると,IEの方が少なくなっています。また,「memory」欄の情報を総合的に解釈すれば,FirefoxはIE以上にメモリーを必要とすることもわかります。しかし,右上の「Handles」欄情報を見ると,Firefoxが使用するハンドル総数は,IEの対応数に較べ,少ないことが分かります。ハンドルというのは,ここでは,Windowsの内部機能を区別するための識別子,と考えておいてください。
また,「Handles」欄の「GDI Handles(GDIハンドラ)」および「USER Handles(USERハンドラ)」についても,FirefoxはIEの半分以下です。GDIハンドラはグラフィック処理の,USERハンドラはユーザー・インタフェース処理に関するハンドラです。これらが少ないということは,一般論で言えば,重い負担のかかるグラフィック処理とユーザー・インタフェース処理が少ないと考えられます。その結果,機能面での軽量化と動作面でのパフォーマンス向上につながるといってよいと思います。
さらにいえば,GDIハンドルやUSERハンドルといったWindows固有の資源を極力使用しないアプリケーション設計になっている,といってもよいでしょう。それでは最後に,スレッドの動きを追いながら,このあたりの事情を少し詳しく探ってみましょう。
Firefoxのスレッドの動き
まずは,FirefoxとIEのそれぞれのスレッドの動きを示す2つの画面をご覧ください(図3[拡大表示],図4[拡大表示])。
これら2種類の画面情報はこれまで同じように,FirefoxとIEを個別に起動した直後に,Process Explorerで取得しています。2つの画面を比較しながら眺めてみると,次のことがはっきり分かります。
FirefoxはActive Xコントロールを基本的に使用していない
IEのスレッド情報画面を見ると,browserui.dllやshdocvw.dll内の関数が呼ばれていることが分かります。これらのファイルは,一般には,DLL(ダイナミック・リンク・ライブラリ)と呼ばれていますが,Active Xコントロールの仲間に入ります。Mozilla Japanの公式ホームページを見ると,「これまで発見されたセキュリティ・ホールの多くがActive Xコントロールに含まれているため,Active Xコントロールの使用を極力避けた」という趣旨のことが述べられています。
IEはActive Xコントロールに依存し,Firefoxは依存しません。この点だけを見ると,2つのブラウザはまったく性質の異なる印象を受けますが,実は,2つのブラウザには大きな共通点があります。その共通点を見てみましょう。
FirefoxとIEの共通点
Firefoxは動作を開始すると,複数のスレッドを作成します。それらのいくつのスレッドの動作を追ってみると,MSVCRT.DLL(C/C++ランタイム)内部の関数が多数呼び出されています。これは,Firefoxは,基本的な開発姿勢として,Windows固有ライブラリ機能を使用するのではなく,可能な限り,標準プログラミング言語C/C++ライブラリを使用する方向で開発されていることを示しています。
一方,IEは動作を開始すると,同じように複数のスレッドを作成しますが,MSVCRT.DLL(C/C++ランタイム)内部の関数をそれほど呼び出すことはありません。つまり,IEはWindows固有ライブラリ機能を積極的に使用する方向で開発されています。
このように,一見すると,2つのブラウザはまったく異なる開発方針の下で作成されている印象を受けます。しかし筆者は,2つのブラウザの間には次のような大きな共通点があると考えています。
可能な限り「クラス」を使用している
Dependency Walkerをはじめとする各種のツールを併用して,2つのブラウザの動きを追ってみると,次のような共通点も見つけ出すこともできます。
「new」と「delete」をはじめとする標準C++機能を使用している
「クラス」,「new」,および「delete」はプログラミング言語Cではなく,C++から採用された機能です。つまり,2つのブラウザ開発チームは,データの表現力(独自の型の定義)と型の安全性(型の厳しいチェック)を尊重するC++的な発想を重視していることが分かります。筆者はこの流れを歓迎するとともに,2つのチームがさらに切磋琢磨し,よりより製品が出荷されることを期待したいと思います。良質なブラウザの選択肢が増えることは決して悪いことではありません。Windowsユーザーは,それぞれのブラウザの特徴を理解した上で,自分のニーズにあったものを選択しましょう。
最後に,Active Xコントロール開発者のために,一言述べさせていただきます。Firefoxは,セキュリティ上の問題からActive Xコントロールの使用を避けています。それはそれで一つの考え方ですが,「現在使用されているすべてのActive Xコントロールがセキュリティ問題を抱えている」と主張しているわけではないと思います。安全性に優れ,しかも高性能なActive Xコントロールが多数存在します。品質を十分吟味した上で使用すれば問題はないと思います。
今回のまとめ
軽量なブラウザFirefoxが利用できるようになった
FirefoxはActive Xコントロールへの依存度を減らしている
すべてのActive Xコントロールがセキュリティ問題を抱えているわけではない
FirefoxとIEは,標準C++機能を重視している
今回は以上で終了です。次回またお会いいたしましょう。ごきげんよう!