今回、Web Workersを試してみた。
JavaScriptで簡単にスレッドが使えるのが便利だったけど、
まだ、スレッドに引数はどうやれば渡せるのかがわからなくて、ちょっと不便なところもあった。
### test.html ###
<!DOCTYPE HTML>
<html>
<head>
<title>babukuma web workers event test</title>
</head>
<body>
<table border=1>
<tr>
<th>thread 1</th>
<th>thread 2</th>
</tr>
<tr>
<td><ul id="result1"></ul></td>
<td><ul id="result2"></ul></td>
</tr>
</table>
<script>
var worker1 = new Worker('worker.js');
worker1.onmessage = function (event) {
var liTag = document.createElement("li");
var textNode = document.createTextNode(event.data);
liTag.appendChild(textNode);
document.getElementById('result1').appendChild(liTag);
};
worker1.onerror = function (event) {
var liTag = document.createElement("li");
var textNode = document.createTextNode("message : " + event.message);
liTag.appendChild(textNode);
document.getElementById('result1').appendChild(liTag);
};
var worker2 = new Worker('worker.js');
worker2.onmessage = function (event) {
var liTag = document.createElement("li");
var textNode = document.createTextNode(event.data);
liTag.appendChild(textNode);
document.getElementById('result2').appendChild(liTag);
if(event.data == 6) {
worker2.terminate();
var liTag = document.createElement("li");
var textNode = document.createTextNode("terminate");
liTag.appendChild(textNode);
document.getElementById('result2').appendChild(liTag);
}
};
worker2.onerror = function (event) {
var liTag = document.createElement("li");
var textNode = document.createTextNode("message : " + event.message);
liTag.appendChild(textNode);
document.getElementById('result2').appendChild(liTag);
};
</script>
</body>
</html>
### worker.js ###
var index = 0;
var babukumaThread = function() {
if(index == 8) {
throw 'babukuma error!!!';
}
postMessage(index);
index++;
setTimeout(babukumaThread, 1000);
}
babukumaThread();
IEとOperaではまだWebWorkersが使えないみたいで、試せなかった。
FireFoxとGoogle Chromeでテストしてみたけど、
なぜかちょっと結果が違う。
Chromeではonerrorイベントが発生してないみたい。。
俺が何か間違ったのかな?