workerAdapter.js
"use strict";
var EFOLAB = {};
EFOLAB.Worker = function(message) {
this.msg = message;
var PATH = 'back/worker.js';
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;
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', function(message) {
new Runner(message)
}, false);