A really simple way to move a stand-alone function/class to a web worker.
npm install workly* A really simple way to move a stand-alone function/class to a worker thread.
* Or, expose an object or function in a worker to the main thread.
* All calls are made asynchronous. Works great with async/await.
* Only 1kB gzipped.
Download the latest from dist folder
or from npm:
```
npm install --save workly
Moving a function to a worker is really simple.
`js
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
// the busyAdd is executed in a worker so
// the UI does not get blocked
})();
`
Or, in fact a Class
`js
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(); // instance created/running in worker
console.log(await a.count); // 0
console.log(await a.add(23, 16)); // 39
console.log(await a.count); // 1
})();
`
In this example, the function depends on moment.js
worker.js
`js`
importScripts('https://cdn.jsdelivr.net/npm/moment@2.20.1/moment.min.js', '../dist/workly.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.jsjs``
(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)));
})();