This tiny library makes your heavy JS code run in a separate thread in the browser.
npm install work-wrap
or
yarn add work-wrap
The code will add a single wrap method to the window.Worker object (if available). It'll fail silently when there's no Worker object on window.
You can wrap any function as long as it's pure (it must not depend on any external variables).
function pow(number) {
return Math.pow(number, 2);
}
var wrappedPow = Worker.wrap(pow);
wrappedPow(3).then(function (result) {
console.log(result); //9
});You can pass to the wrapped function any arguments that can be serialized to JSON and pure functions.
Example of passing a function:
function run(fn,number) {
return fn(number);
}
var wrappedPow = Worker.wrap(run),
passedFn = function(value) {
return Math.pow(value, 2);
}
wrappedPow(passedFn, 3).then(function (result) {
console.log(result); //9
});When you run terminate the task, it will destroy the worker behind that task. If the worker was running a task, it'll not be finished, so make sure you terminate the worker after the work has been completed.
task = Worker.wrap(function() {
//your heavy code here
});
//Perform your heavy task any number of times.
task();
//When you don't need your heavy task anymore, terminate the worker to free the resources and avoid memory leaks.
task.terminate();If you have terminated the task, the worker behind it can be restarted without wrapping the same function again. Just call task.restart().
task = Worker.wrap(function() {
//your heavy code here
});
task.terminate();
//..Some time later you need to run the task again.
task.restart();
//Run normally.
task().then(...)