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>