Webworker

Aus ProgrammingWiki

Wiki-Quelltext dieser Seite.

<language>Javascript</language>
<run id="5aa45bbd790a9">

function InlineWorker(func, self) {
  var _this = this;
  var functionBody;
  var ticket = 0; 
  self = self || {};

  functionBody = func.toString().trim().match(
    /^function\s*\w*\s*\([\w\s,]*\)\s*{([\w\W]*?)}$/
  )[1];
    
  return new Worker(URL.createObjectURL(
    new Blob([ functionBody ], { type: "text/javascript" })
  ));

  function postMessage(data) {
    setTimeout(function() {
      _this.onmessage({ data: data });
    }, 0);
  }

  this.self = self;
  this.self.postMessage = postMessage;

  setTimeout(func.bind(self, self), 0);
}

InlineWorker.prototype.postMessage = function postMessage(data) {
  var _this = this;
  setTimeout(function() {
    _this.self.onmessage({ data: data });
  }, 0);
};

var JSONParseWorker = new InlineWorker(function(self) {
  self.onmessage = function(e) {
    var data = e.data;
    var json = JSON.parse( data );
    postMessage(json);
  };
});
JSONParseWorker.onmessage = function(e) {
  alert(e.data.id + ":" + e.data.data);
};

JSONParseWorker.postMessage('{"id":"123", "data":'+'{"name":"test"}'+'}');
</run>