HTML5のWebWorkersを使ってみた。

シングルスレッドのJavaScriptで並列処理を実現する技術。とりあえず並列処理の恩恵はないが、ごく簡単なサンプルで試してみた。Firefox4.0とSafari5.0.5でやってみたところ問題なく動作した。

workerとのデータのやり取りには"postMessage"と"onmessage(イベントリスナーを使う場合はmessageイベント)"で行う。

注意点としては、Worker側ではDOMが使えない点。prototype.jsjQueryが使えないので注意。


html

<!DOCTYPE html>
<html>
<head>
<script type="text/javascript">
function $(id) {
	return document.getElementById(id);
}

var worker = new Worker("worker.js");

function messageHandler(event) { 
	alert(event.data); 
}

function errorHandler(error) {
	alert(error.message);
}

window.onload = function() {
	if (typeof(Worker) !== "undefined") {
		worker.addEventListener("message", messageHandler);
		worker.addEventListener("error", errorHandler); 
	        setTimeout("worker.postMessage('worker')", 1000);
	} else {
		alert("Web Workersが利用できません。");
	}
}

</script>
</head>
<body>
</body>
</html>

worker.js

function messageHandler(event) { 
	postMessage("Hello, " + event.data + " !");
}

addEventListener("message", messageHandler);