たぼさんの部屋

いちょぼとのんびり

webWorkerAdapter

workerAdapter.js

"use strict";
var EFOLAB = {};
/**
 *
 * @param {Object} message
 */
EFOLAB.Worker = function(message) {
   this.msg = message;
   var PATH = 'back/worker.js';
   //アプリによってこのURLを定義すること
   this.worker = new Worker(PATH);
   this.worker.addEventListener('message', this, false);
};
EFOLAB.ETC={};
EFOLAB.Worker.prototype.handleEvent = function(event) {
   console.log(event);
   var data = event.data;
   //送信されたデータはevent.dataとして受け取れる
   switch(data.what) {
      case 'calc':
         console.log(data.obj);
         break;
      case 'func':
         var func = eval('(' + data.obj + ')');
         func();
         break;
   }
};
EFOLAB.Worker.prototype.start = function() {
   this.worker.postMessage(this.msg);
};
EFOLAB.Worker.prototype.stop = function() {
   this.worker.terminate();
};
EFOLAB = ( function() {
      var worker;
      var worker2;
      var message = {};
      var init = ( function() {
            message.what = "calc";
            message.arg1 = 100;
            message.arg2 = 100000;
            worker = new EFOLAB.Worker(message);
            worker.start();
            worker.stop();

            message.what = "calc";
            message.arg1 = 50;
            message.arg2 = 500;
            new EFOLAB.Worker(message).start();

            message.what = "func";
            new EFOLAB.Worker(message).start();
            
         }());

      function loaded() {
         console.log('loaded');
      }

      if (document.body) {
         loaded();
      } else {
         document.addEventListener('DOMContentLoaded', loaded, false);
      }
   }());

worker.js

"use strict";

function calc(data) {
   var ret = 0;
   var from = data.arg1;
   var to = data.arg2;
   for (var i = from; i < to; i++) {
      ret += i;
   }
   return ret;
}

function func() {
   var ret = (function() {
      console.log('hoge');
   });
   return ret;
}



var Runner = function(message) {
   this.data = message.data;
   this.what = message.data.what;
   switch(message.data.what) {
      case "calc":
         this.send(calc(message.data));
         break;
      case 'func':
         this.send("" + func() + "");
         break;
   }
};
Runner.prototype.send = function(value) {
   var message = {};
   message.what = this.what;
   message.obj = value;
   self.postMessage(message)
};
//self.addEventListener('message', receiver, false);
self.addEventListener('message', function(message) {
   new Runner(message)
}, false);