Web Workersによるバックグラウンド処理 (1/5)
作成:2010-12-20 12:53
更新:2010-12-20 12:53
更新:2010-12-20 12:53
■マルチスレッドとWeb Worker
HTML5になり、Web上で本格的にアプリケーションを作成しようと考えるようになると、やはりいろいろと足りない機能が出てきます。HTML5で新たに実装されている数々の機能は、そうした「Webで本格アプリを作る上で、これがないと困る!という機能」ばかりといえるでしょう。Cavasによる描画、データベース、ファイルアクセス、双方向通信……。今回取り上げる「Web Workers」も、そうしたものの一つです。
Web Workersは、「バックグラウンドで処理を実行するための機能」です。基本的にHTMLの処理(すなわちJavaScriptで実行される処理)というのは、「処理を開始したら、ユーザーはそれが終わるまでずっと待っていて、終わったらまた操作できる」という形になっていました。スクリプトが実行している間は、ユーザーは何も操作できず、すべて終わってから再び操作が戻ってくる、という仕組みになっていたのです。
これは、Webというのが1つのスレッド(処理を実行する単位。Web Workersでは「ワーカー(Worker)」といいますが、ここでは一般に馴染みのある「スレッド」と呼ぶことにします)で動いているためです。同時に複数の処理を並行して動かすことができないため、なにか動いている間は他のことはできなかったのです。
この「同時に複数の処理の実行」を可能にするために導入されたのが「Web Workers」です。Web Workersを使うことで、時間のかかる処理をバックグラウンドで実行させ、その間、普通にWebページをユーザーが操作できるようにすることが可能です。
ただし、このWeb Workersは万能ではありません。まず、Web Workersで実行するスクリプトは、HTMLに埋め込むのでははなく、別ファイルとして用意する必要があります。そして、実行するスクリプト内からは、HTMLの要素に直接アクセスすることはできないのです。いわば、HTMLの表示とは切り離された状態で動くのがWeb Workersなのです。
では、Web WorkersからHTMLの要素を一切使えないのか?というと、そういうわけでもありません。Web Workersと、実際に実行されるスクリプトの間では、メッセージを送信してやりとりを行うことが可能になっています。つまり、Web Workersのオブジェクトからバックグラウンドスレッドにメッセージを送って処理を実行し、バッググラウンドスレッドからWeb Workersのオブジェクトへとメッセージを送って結果を送信する、といったやり取りを行いながら実行していくことになるわけです。
Web Workersは、「バックグラウンドで処理を実行するための機能」です。基本的にHTMLの処理(すなわちJavaScriptで実行される処理)というのは、「処理を開始したら、ユーザーはそれが終わるまでずっと待っていて、終わったらまた操作できる」という形になっていました。スクリプトが実行している間は、ユーザーは何も操作できず、すべて終わってから再び操作が戻ってくる、という仕組みになっていたのです。
これは、Webというのが1つのスレッド(処理を実行する単位。Web Workersでは「ワーカー(Worker)」といいますが、ここでは一般に馴染みのある「スレッド」と呼ぶことにします)で動いているためです。同時に複数の処理を並行して動かすことができないため、なにか動いている間は他のことはできなかったのです。
この「同時に複数の処理の実行」を可能にするために導入されたのが「Web Workers」です。Web Workersを使うことで、時間のかかる処理をバックグラウンドで実行させ、その間、普通にWebページをユーザーが操作できるようにすることが可能です。
ただし、このWeb Workersは万能ではありません。まず、Web Workersで実行するスクリプトは、HTMLに埋め込むのでははなく、別ファイルとして用意する必要があります。そして、実行するスクリプト内からは、HTMLの要素に直接アクセスすることはできないのです。いわば、HTMLの表示とは切り離された状態で動くのがWeb Workersなのです。
では、Web WorkersからHTMLの要素を一切使えないのか?というと、そういうわけでもありません。Web Workersと、実際に実行されるスクリプトの間では、メッセージを送信してやりとりを行うことが可能になっています。つまり、Web Workersのオブジェクトからバックグラウンドスレッドにメッセージを送って処理を実行し、バッググラウンドスレッドからWeb Workersのオブジェクトへとメッセージを送って結果を送信する、といったやり取りを行いながら実行していくことになるわけです。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
※関連コンテンツ
「JavaScriptによるHTML5プログラミング入門」に戻る