Skip to content

Webpack loader to offload modules to Worker threads seamlessly using Comlink.

License

Notifications You must be signed in to change notification settings

wellcaffeinated/comlink-loader

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

21 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

comlink-loader

🛰 comlink-loader 📡

Offload modules to Worker threads seamlessly using Comlink.

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-loader

Usage

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 function meaningOfLife(){
  return 42;
}

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 worker from 'comlink-loader!./my-class';
const inst = worker();

await inst.meaningOfLife(); // 42

const obj = await new inst.MyClass(42); // notice the await

await obj.increment();

await obj.getValue();  // 43

License

Apache-2.0

About

Webpack loader to offload modules to Worker threads seamlessly using Comlink.

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Languages

  • JavaScript 100.0%