1.2.1 • Published 7 years ago
@ln-zap/comlink-loader v1.2.1
Features
- Offload almost any module into a Worker with little or no usage change
- Supports arbitrary classes, objects & functions (await new Foo())
- Works beautifully with async/await
- Built-in code-splitting: workers are lazy-loaded
Installation
npm install -D comlink-loaderUsage
The goal of comlink-loader is to make the fact that a module is running inside a Worker nearly transparent to the developer.
In the example below, the sole difference between running MyClass on a Worker thread instead of the main thread is that instantiation and method calls must be prefixed with await. This is required because Worker interactions are inherently asynchronous.
my-class.js: (gets moved into a worker)
// Dependencies get bundled into the worker:
import rnd from 'random-int';
// Export as you would in a normal module:
export class MyClass {
  constructor(value = rnd()) {
    this.value = value;
  }
  increment() {
    this.value++;
  }
  // Tip: async functions make the interface identical
  async getValue() {
    return this.value;
  }
}main.js: (our demo, on the main thread)
import { MyClass } from 'comlink-loader!./my-class';
const inst = await new MyClass(42); // notice the await
await inst.increment();
await inst.getValue();  // 43License
Apache-2.0
1.2.1
7 years ago