![]() |
Robert’s talk |
Robert Nyman氏がUsing HTML5 Web Workers to have background computational power - Robert's talkにおいて、Web Workersの実装例を紹介している。短くてわかりやすいサンプルコードが掲載されておりWeb Workersを試してみたい場合の最初の取っ掛かりとして取り組みやすい。
Web WorkersはHTML5とともに策定が進められているJavaScript API。JavaScriptファイルをダイナミックに読み込みバックグラウンドで処理を実施する。UIとは別のスレッドで動作する。特徴的な動作や仕組みまとめると次のとおり。
| Web Workersの特徴 |
|---|
| JavaScriptファイルを読み込んでバックグラウンドで処理を実行する。 |
| 別スレッドで動作するため、マルチコアの性能を発揮しやすくなる。 |
| UIスレッドとは別のスレッドで動作するため、重たい処理を実施することでUIが固まりレスポンスが悪くなるという状況を避けられるようになる。 |
| 実装上の主な特徴 |
|---|
| Web WorkersスレッドとUIスレッドはお互いにpostMessage()でデータの送信が可能。 |
| Web WorkersスレッドとUIスレッドはお互いにonmessageイベントハンドラでpostMessage()のイベントを受信する。 |
| エラーはonerrorイベントハンドラで処理する。 |
今のところサポートしているブラウザはFirefoxとSafari、Chrome。IEとOperaはサポートしていない。ブラウザのUIが固まるという現象を避けることができ、利用するケースによって左右されるもののマルチコアの性能を発揮しやすくなるとい点においてWeb Workersは高く注目される。しかしながら、今のところすべての主要ブラウザがサポートしていないうえに、デバッガによるトレースが簡単には実施できないという問題もある。
しかし、よりリッチで多機能なWebアプリケーションを実装するにあたってWeb Workersの機能は魅力的。フレームワームやライブラリ、実装ノウハウは今後さまざまな発表があると思うが、注目しておきたい技術のひとつといえる。以降にUsing HTML5 Web Workers to have background computational powerで紹介されているコードを試せるようにまとめたものを掲載しておく。2つのファイルを同じフォルダに配置してWeb Workersに対応したブラウザでHTMLファイルを閲覧することで動作する。
【demo.html】
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Web Worker Demo</title>
<script type="text/javascript">
function init()
{
var worker = new Worker("worker.js");
worker.onmessage = function(e) {
alert(e.data);
};
worker.onerror = function(e) {
alert(e.data);
};
worker.postMessage(0);
}
window.addEventListener("load", init, true);
</script>
</head>
<body>
</body>
</html>
【worker.js】
onmessage = function(e) {
for (var i=e.data, j=10; i<j; i++) {
postMessage(i);
};
};
Using HTML5 Web Workers to have background computational powerのサンプルをそのまま使おうとすると一気に大量のダイアログを開こうとしてFirefoxは動作不全に陥るので注意が必要。上記サンプルコードでは繰り返しの数を減らして動作するように変更してある。
| CSS display:inline-blockを活用する方法と注意点 [2010/3/1] |
| IEでCSSが2回ダウンロードされるパターン [2010/2/22] |
| CSSでグラデーションを実現する方法、主要ブラウザ全対応 [2010/2/17] |
| HTML5 video、ブラウザ対応状況とコーデックまとめ [2010/1/27] |
| JavaSriptとCSSの結合/圧縮ツール14 [2010/1/22] |
| トマトを食べれば痩せられる!? -京大ら、新発見の成分で肥満改善効果を実証 [21:00 2/10] |
| JAXA、液体シリコン中に残存する共有結合を観察 -大口径ウェハの実現に期待 [20:11 2/10] |
| NEDOなど、熱膨張が小さな樹脂複合材料ペレットの量産化に成功 [19:22 2/10] |
| 理研、一般顕微鏡を蛍光顕微鏡に強化できるアダプタを試作して性能を実証 [19:15 2/10] |
| 天の川のブラックホールが小惑星を飲み込んでいる - NASAが発表 [18:08 2/10] |
|
9ストーリーズ ~バレンタインのエピソード~ [08:05 2/11] キャリア |
|
RX-7改フェラーリ登場!/マジックRX-7XX 【大阪オートメッセ2012】 [08:04 2/11] キャリア |
|
【連載】鉄道トリビア 第137回 山手線と京浜東北線から●●●が消えた!? [08:00 2/11] ライフ |
|
JRグループ、「周遊きっぷ」を見直し - 19の周遊ゾーンが3/31で販売終了に [07:30 2/11] ライフ |
|
「青春18きっぷ」春季用は2/20発売 - 夏季用・冬季用の発売は現時点で未定 [07:30 2/11] ライフ |