このページの本文へ

前へ 1 2 3 次へ

WWW完全制覇 第2回

サーバを指定するURLの仕組み

2009年05月12日 08時00分更新

文● 遠藤哲、中塚寛幸、ネットワークマガジン編集部

  • この記事をはてなブックマークに追加
  • 本文印刷

プラグインとアドオン

 ここまではWebブラウザ単体の動作を説明してきたが、IEやFirefoxを代表に、多くのWebブラウザには外部のプログラムを呼び出す機能がある。Webブラウザは本来、テキストと静止画を組み合わせて表示する機能しかなかった。そのため、動画を表示したいとか、ユーザーとのインタラクティブなやり取りをしたいといった要求に応えるのには力不足な面がある。

 そこで開発されたのが、Webブラウザから外部プログラム(プラグイン)を呼び出して使う方法である。Webページ内に表示されるFlashのアニメーションやQuickTimeの動画などは、Webブラウザが表示機能を持っているのではなく、プラグインによるものである。プラグインがあれば、プログラムのGUIをWebブラウザ任せにして、複雑な機能を実装してWebブラウザに機能を追加できる。IEであれば、通信内容を解析する「Fiddler」やWebページの構造解析などを行なう「IE Developer Toolbar」といった純正プラグイン、FirefoxであればMozillaの公式サイトから多数の追加機能を入手できる。

 なお、プラグインとは、Webブラウザのプログラムとしての機能を追加する拡張機能とは異なる。たとえばJavaScriptデバッガやパケットチェッカといった拡張機能は、アドオンと呼ばれる。IEとFirefoxでの呼称の違いもあり、プラグインとアドオンはWebブラウザの種類ごとに厳密には意味合いが違うと覚えておこう。

動作はユーザーの操作中心で

 実は、図4の処理過程は、説明を簡単にするためにWebブラウザの動作を簡略化したものだ。IE6/7やFirefoxといった現在主流のWebブラウザの動作は、これとは少々異なっている。これらのWebブラウザの処理は、図4のような上から下への一直線な処理ではなく、より多層的な流れを持つ(図5)。

図5 Webブラウザの動作

 多層的に処理される理由はいくつかあるが、そもそもインターネットによる通信は、待ち時間があるために、さまざまな処理を並行して行なわないと効率が悪すぎることが最大の要因である。

 たとえば、table要素を用いた表組みの場合、表の中の各セルの内容や座標が随時変動する。そのため、レンダリングの工程での描画位置計算が複数回処理される(再帰的処理という)場合が多い。表を生成している過程で表示が崩れていたものが、徐々に整った形に表示されるのは、このようなケースである(画面2)。

画面2 描画中に崩れて表示された表が、徐々に整った形で表示される

 また、ユーザーの操作は偶発的に起こるため、本来は描画段階で確定していなければならない情報が、描画途中に決定するケースもしばしば発生する。こうした状況に対処するため、Webブラウザは「イベント」中心で動作する。このイベントこそが、Webブラウザの動作における重要なキーワードである。

 そもそも、コンピュータ本来の動作は、プログラムの最初から最後まで、一本道で順番に作業をこなしていく「逐次的」処理が主体である。しかし、たとえば「ユーザーがハイパーリンクをマウスでクリックした」といった動作は、ユーザーの操作で突発的に発生するため、発生のタイミングをプログラムからは予測できない。そこでWebブラウザは、リンクのクリックやウィンドウのサイズ変更、ページのスクロールといった突発的要因(これが「イベント」)を「非同期的」に処理している(図6)。 Webブラウザは上に挙げた以外にも多数のイベントを管理しており、Webページ取得後のWebブラウザは、それらイベントを処理するためのプログラムと呼んでも過言ではない。

図6 Webブラウザとイベント

 発生したイベントは、イベントのたまり場(イベントループ)に登録され、当該イベントを処理すべきロジック(ハンドラ)に通知される。たとえばマウスをある要素Aの上に動かすと、要素Aは「mouseover」というイベントを発行する。mouseoverイベントは、事前に登録されたロジック(ハンドラ)が収集し、ハンドラに制御が移行される。

 このハンドラは、通知を受けるまでは待機状態であり、通知されることによって初めて実行され、ハンドラ内の処理が終わると休止状態に入る。ハンドラの機能は、おおむねJavaScriptで記述されており、この例ではmouseoverイベントに応じて文字の色が変化する、といった処理が非同期的に行なわれるのだ。

 Webブラウザの仕組みとしても述べたが、Webブラウザのコアとなる処理の大半が内部的にはイベントとして処理される。つまり、Webブラウザは、処理単位ごとに独立したプログラム部品(コンポーネント)の集合体であり、さまざまなイベントによってコンポーネントがデータの受け渡しを行なった結果としてWebページを構成しているわけだ。

前へ 1 2 3 次へ

カテゴリートップへ

この連載の記事