1.0.0 • Published 7 years ago

work-wrap v1.0.0

Weekly downloads
4
License
MIT
Repository
-
Last release
7 years ago

work-wrap Build Status Code Climate

This tiny library makes your heavy JS code run in a separate thread in the browser.

install

npm install work-wrap

or

yarn add work-wrap

Usage

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.

Function Worker.wrap(Function)

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
});

wrappedFn.terminate

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();

wrappedFn.restart

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(...)