- A really simple way to move a stand-alone function/class to a worker thread.
- All calls are made asynchronous. Works great with async/await.
- Only 1.3kb gzipped.
Download the latest from dist folder
or from npm:
npm install --save workly
Moving a function to a worker is really simple.
function busyAdd(a, b) {
let st = Date.now();
while (true) {
if ((Date.now() - st) > 2000) break;
}
return a + b;
}
(async () => {
let workerAdd = workly.proxy(busyAdd);
console.log(await workerAdd(23, 16)); // 39
})();
Or, in fact a Class
class Adder {
constructor() {
this.count = 0;
}
add(a, b) {
this.count++;
return a + b;
}
}
(async () => {
let WAdder = workly.proxy(Adder);
let a = await new WAdder();
console.log(await a.count); // 0
console.log(await a.add(23, 16)); // 39
console.log(await a.count); // 1
})();
The above examples only work when the class/function is not dependent on the containing scope, i.e. other libraries or global objects. But, you can create a custom worker.js file and move the code in there. In the worker, you can expose your object/function/class using workly.expose method.
In this example, the function depends on moment.js
worker.js
importScripts('https://cdn.jsdelivr.net/npm/moment@2.20.1/moment.min.js', '../dist/workly.min.js');
function friendlyTime(value) {
return moment(value).calendar(null, {
sameDay: function (now) {
if (now - this < 1000 * 60) {
return "[Just now]";
} else if (now - this < 1000 * 60 * 60) {
return "[" + Math.round((now - this) / (1000 * 60)) + " mins ago]";
} else {
return '[Today at] LT'
}
}
});
}
workly.expose(friendlyTime);
main.js
(async () => {
let w = workly.proxy("./worker.js");
let now = Date.now();
console.log(now);
console.log(await w(now));
console.log(await w(now - (24 * 60 * 60 * 1000)));
console.log(await w(now - (4 * 24 * 60 * 60 * 1000)));
})();
If you're not using a custom worker, the function/class being pushed to the worker cannot depend on the containing scope. Since workers do not have access to DOM, DOM manipulation is not supported.
See the examples folder