diff --git a/index.html b/index.html index bf0e674..f550dd1 100644 --- a/index.html +++ b/index.html @@ -90,6 +90,28 @@
You can even transmit transferable objects:
+ ++var sum = function (n) { + var total = 0; + for (var i=0; i < n.length; ++i) { + total += n[i]; + } + return total; +}; + +// Spawn a remote reference +var r = Parallel.spawn(sum, new Uint8Array([1,2,3])); + // Call back when done r.fetch(yourCallBack);diff --git a/js/main.js b/js/main.js index b827998..afb17aa 100644 --- a/js/main.js +++ b/js/main.js @@ -27,6 +27,34 @@ $(function () { r.fetch(check()); }); + + $('#example-5 .btn').click(function () { + var that = this; + + var sum = function (n) { + var total = 0; + for (var i=0; i < n.length; ++i) { + total += n[i]; + } + return total; + }; + + var check = function () { + if (!r.fetch()) { + $(that).siblings('.result').html('Computation started: ' + Math.floor((Date.now() - start) / 1000) + 's ago'); + } else { + return $(that).siblings('.result').html('Result is: ' + r.fetch() + '. Computed in: ' + Math.floor((Date.now() - start) / 1000) + ' seconds.'); + } + + setTimeout(check, 10); + } + + var start = Date.now(); + var r = Parallel.spawn(sum, new Uint8Array([1,2,3])); + + r.fetch(check()); + }); + $('#example-3 .btn').click(function () { var that = this; diff --git a/parallel.js b/parallel.js index 15488f0..54f120f 100644 --- a/parallel.js +++ b/parallel.js @@ -45,7 +45,7 @@ var Parallel = (function () { return isNode ? 'process.on("message", function (m) { process.send({ data : JSON.stringify((' + op + ').apply(process, JSON.parse(m))) }); });' : - 'self.onmessage = function (e) { self.postMessage(JSON.stringify((' + op + ').apply(self, JSON.parse(e.data)))); };'; + 'self.onmessage = function (e) { self.postMessage((' + op + ').apply(self, e.data)); };'; }; var wrapFiles = function (str) { @@ -73,10 +73,11 @@ var Parallel = (function () { }; RemoteRef.prototype.onWorkerMsg = function (e) { - this.ref.data = JSON.parse(e.data); - if (isNode) { + this.ref.data = JSON.parse(e.data); this.ref.worker.terminate(); + } else { + this.ref.data = e.data; } }; @@ -97,7 +98,11 @@ var Parallel = (function () { return function (fn, args) { var r = new RemoteRef(fn); - r.worker.postMessage(JSON.stringify([].concat(args))); + if (isNode) { + r.worker.postMessage(JSON.stringify([].concat(args))); + } else { + r.worker.postMessage([].concat(args)); + } return r; };