Web Worker を使ってみる
Web Worker ってどう使うんだろうって思って、使ってみました。
以下のコードは「入力された数字を 2倍にして、 !!! で囲み、表示する。」コードです。
<!DOCTYPE html> <meta charset="utf-8"> <title>Web Worker Test</title> <script id="worker01" type="text/js-worker"> /* 2倍にして返す */ onmessage = function (oEvent) { postMessage(parseInt(oEvent.data) * 2); }; </script> <script id="worker02" type="text/js-worker"> /* !!! で修飾して返す */ onmessage = function (oEvent) { postMessage('!!! ' + oEvent.data + ' !!!'); }; </script> <p>入力された数字を 2倍にして、 !!! で囲み、表示する。</p> <p id="input"> <input type="text" id="num" value='12345' /> <input type="button" value="submit" id="button" disabled /> </p> <p id="result">spam, spam, spam.</p> <script> // 与えられた ID のデータを取得し、その内容の Web Worker を作成し、返す。 // 以下のリンク先から流用した。 // https://developer.mozilla.org/ja/docs/Web/Guide/Performance/Using_web_workers#Embedded_workers var _getWorker = function _get_worker(_id) { var blob = new Blob( Array.prototype.map.call( document.querySelectorAll(_id), function (oScript) { return oScript.textContent; }), {type: "text/javascript"}); return new Worker(window.URL.createObjectURL(blob)); }; // Worker の作成 var worker01 = _getWorker('#worker01'), worker02 = _getWorker('#worker02'); // worker01 からの戻り値は worker02 に渡す worker01.onmessage = function (oEvent) { worker02.postMessage(oEvent.data); }; // worker02 からの戻り値は表示する。 worker02.onmessage = function (oEvent) { document.getElementById('result').innerHTML = oEvent.data; }; // button のクリックに設定する var button = document.getElementById('button'); button.onclick = function _postWorker01() { var value = document.getElementById('num').value; worker01.postMessage(value); }; // ボタンを有効化する。 button.removeAttribute('disabled'); </script>