A small library for communication between the main thread and workers.
Web Workers are a cool way to offload expensive work to another thread. However, all communication is done through a single message
event. If you want your worker to do more than 1 thing, a lot of boilerplate is required to reroute messages to the correct handler.
This is a small library that create instances of event emitters that run both in the window and worker contexts. This makes it easy to send a message to one specific emitter, allowing you to have as many different handlers as you want.
window.js
import { connect } from 'https://unpkg.com/leni/leni.js';
let worker = new Worker('./worker.js');
let emitter = connect('app', worker);
emitter.addEventListener('anything-here', function(resp){
console.log(resp); // Hi Matthew!
});
emitter.post('say-hi', { name: 'Matthew' });
worker.js
importScripts('https://unpkg.com/leni/leni.js');
function onApp(emitter) {
emitter.addEventListener('say-hi', data => {
let msg = `Hi ${data.name}!`;
emitter.post('anything-here', msg);
});
}
leni.subscribe('app', onApp);
That's it!
You can install with npm or yarn:
> npm install leni --save
> yarn add leni
Or better yet, use directly from unpkg:
import { connect } from 'https://unpkg.com/leni/leni.js';
// Use it!
If you plan on using leni throughout your app you can create a wrapper module like so:
leni.js
export * from 'https://unpkg.com/leni/leni.js';
app.js
import { connect } from './leni.js';