web-worker-manager
Advanced tools
Comparing version 0.1.1 to 0.2.0
{ | ||
"name": "worker-manager", | ||
"version": "0.1.1", | ||
"version": "0.2.0", | ||
"description": "Worker manager", | ||
@@ -5,0 +5,0 @@ "keywords": [ |
@@ -0,1 +1,7 @@ | ||
0.2.0 / 2015-11-19 | ||
================== | ||
* numWorkers option now defaults to CORES-1 | ||
* allow to send transferable objects | ||
0.1.1 / 2015-11-19 | ||
@@ -2,0 +8,0 @@ ================== |
{ | ||
"name": "web-worker-manager", | ||
"version": "0.1.1", | ||
"version": "0.2.0", | ||
"description": "Worker manager", | ||
@@ -5,0 +5,0 @@ "keywords": [ |
@@ -21,3 +21,10 @@ 'use strict'; | ||
// Parse options | ||
this._numWorkers = (options.maxWorkers > 0) ? Math.min(options.maxWorkers, CORES) : CORES; | ||
if (options.maxWorkers === undefined || options.maxWorkers === 'auto') { | ||
this._numWorkers = Math.min(CORES - 1, 1); | ||
} else if (options.maxWorkers > 0) { | ||
this._numWorkers = Math.min(options.maxWorkers, CORES); | ||
} else { | ||
this._numWorkers = CORES; | ||
} | ||
this._workers = new Map(); | ||
@@ -95,3 +102,3 @@ this._timeout = options.timeout || 0; | ||
var execInfo = this._waiting[i]; | ||
if (typeof execInfo[3] === 'number' && execInfo[3] !== worker.id) { | ||
if (typeof execInfo[4] === 'number' && execInfo[4] !== worker.id) { | ||
// this message is intended to another worker, let's ignore it | ||
@@ -105,6 +112,6 @@ continue; | ||
args: execInfo[1] | ||
}); | ||
}, execInfo[2]); | ||
worker.running = true; | ||
worker.time = Date.now(); | ||
this._workers.set(worker, execInfo[2]); | ||
this._workers.set(worker, execInfo[3]); | ||
this._working++; | ||
@@ -136,3 +143,3 @@ break; | ||
for (var worker of this._workers.keys()) { | ||
promises.push(this.post(event, args, worker.id)); | ||
promises.push(this.post(event, args, [], worker.id)); | ||
} | ||
@@ -142,7 +149,11 @@ return Promise.all(promises); | ||
WorkerManager.prototype.post = function (event, args, id) { | ||
WorkerManager.prototype.post = function (event, args, transferable, id) { | ||
if (args === undefined) args = []; | ||
if (transferable === undefined) transferable = []; | ||
if (!Array.isArray(args)) { | ||
args = [args]; | ||
} | ||
if (!Array.isArray(transferable)) { | ||
transferable = [transferable]; | ||
} | ||
@@ -152,3 +163,3 @@ var self = this; | ||
if (self._terminated) throw new Error('Cannot post (terminated)'); | ||
self._waiting.push([event, args, [resolve, reject], id]); | ||
self._waiting.push([event, args, transferable, [resolve, reject], id]); | ||
self._exec(); | ||
@@ -155,0 +166,0 @@ }); |
@@ -15,7 +15,12 @@ 'use strict'; | ||
}; | ||
ManagedWorker.prototype._send = function (id, data) { | ||
ManagedWorker.prototype._send = function (id, data, transferable) { | ||
if (transferable === undefined) { | ||
transferable = []; | ||
} else if (!Array.isArray(transferable)) { | ||
transferable = [transferable]; | ||
} | ||
self.postMessage({ | ||
id: id, | ||
data: data | ||
}); | ||
}, transferable); | ||
}; | ||
@@ -31,4 +36,4 @@ ManagedWorker.prototype._trigger = function (event, args) { | ||
case 'exec': | ||
event.data.args.unshift(function (data) { | ||
worker._send(event.data.id, data); | ||
event.data.args.unshift(function (data, transferable) { | ||
worker._send(event.data.id, data, transferable); | ||
}); | ||
@@ -38,4 +43,6 @@ worker._trigger(event.data.event, event.data.args); | ||
case 'ping': | ||
worker.send(event.data.id, 'pong'); | ||
worker._send(event.data.id, 'pong'); | ||
break; | ||
default: | ||
throw new Error('unexpected action: ' + event.data.action); | ||
} | ||
@@ -42,0 +49,0 @@ }; |
New author
Supply chain riskA new npm collaborator published a version of the package for the first time. New collaborators are usually benign additions to a project, but do indicate a change to the security surface area of a package.
Found 1 instance in 1 package
9676
221
0