Webworker
Aus ProgrammingWiki
Wiki-Quelltext dieser Seite.
<language>Javascript</language>
<run id="5aa45bbd790a9">
var WORKER_ENABLED = !!(global === global.window && global.URL && global.Blob && global.Worker);
function InlineWorker(func, self) {
var _this = this;
var functionBody;
var ticket = 0;
self = self || {};
if (WORKER_ENABLED) {
functionBody = func.toString().trim().match(
/^function\s*\w*\s*\([\w\s,]*\)\s*{([\w\W]*?)}$/
)[1];
return new global.Worker(global.URL.createObjectURL(
new global.Blob([ functionBody ], { type: "text/javascript" })
));
}
function postMessage(data, callback) {
setTimeout(function() {
_this.onmessage({ data: data, callback:callback });
}, 0);
}
this.self = self;
this.self.postMessage = postMessage;
setTimeout(func.bind(self, self), 0);
}
InlineWorker.prototype.parse = function parse(data,callback) {
var _this = this;
setTimeout(function() {
_this.self.onmessage({ data: data, callback:callback });
}, 0);
};
var JSONParseWorker = new InlineWorker(function(self) {
self.onmessage = function(e) {
var data = e.data;
var json = JSON.parse( data );
postMessage(json,e.callback);
};
});
JSONParseWorker.onmessage = function(e,callback) {
if(callback) callback(e.data);
};
JSONParseWorker.parse('{"name":"test"}',function(obj){
console.log(obj);
});
</run>