JavaScript
初心者

Web Workerのメモ

Web Workerを少し勉強したので、そのメモ。

Web Workerって?

WebWorkerは並列処理を実現する機能。

使い方

ワーカー(サブスレッド)で実行したい処理を別コードで用意する。
メインスレッド側でWorkerオブジェクトをインスタンス化。

とりあえず書いてみる

echo-back-server的なワーカーを作ってみる。
ワーカーはメインスレッドからメッセージを受け取り、返答を返す。
echo-back-serverと言ったが、メッセージのオウム返しではなく、ACKという文字列を返すようにする。

worker.js
self.addEventListener('message', function(e){
  let resp = 'say hello!';
  if (e.data.msg == 'hello'){
    resp = 'ACK';
  }
  postMessage(resp);
});

上で書いたワーカーを実験するためにメインスレッド側のコード。

index.html
<!DOCTYPE html>
<html>
  <head>
    <title>webworker test</title>
     <script src="./workerclient.js"></script>
  </head>
  <body>
    <form>
      msg: <input id="msg", value="hello">
      <input id="btn", type="button", value="send"/>
      <span id="msgbox"></span>
    </form>
  </body>
</html>
workerclient.js
document.addEventListener('DOMContentLoaded', function(){

  document.getElementById('btn').addEventListener('click', function(){
    let worker = new Worker('worker.js');

    worker.postMessage({
      msg: document.getElementById('msg').value
    });

    worker.addEventListener('message', function(e){
      document.getElementById('msgbox').textContent = e.data;
    }, false);

    worker.addEventListener('eroor', function(e){
      document.getElementById('msgbox').textContent = e.data;
    }, false);

  },false);

},false);