Skip to content

Wrap any JS function to run in a separate WebWorker thread. Less than 1kb gzip+min.

Notifications You must be signed in to change notification settings

Wain-PC/work-wrap

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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

About

Wrap any JS function to run in a separate WebWorker thread. Less than 1kb gzip+min.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published