workerize-loader

workerize-loader

A webpack loader that moves a module and its dependencies into a Web Worker, automatically reflecting exported functions as asynchronous proxies.

  • Bundles a tiny, purpose-built RPC implementation into your app
  • If exported module methods are already async, signature is unchanged
  • Supports synchronous and asynchronous worker functions
  • Works beautifully with async/await
  • Imported value is instantiable, just a decorated Worker

Install

  1. npm install -D workerize-loader

Usage

worker.js:

  1. // block for `time` ms, then return the number of loops we could run in that time:
  2. export function expensive(time) {
  3. let start = Date.now(),
  4. count = 0
  5. while (Date.now() - start < time) count++
  6. return count
  7. }

index.js: (our demo)

  1. import worker from 'workerize-loader!./worker'
  2. let instance = worker() // `new` is optional
  3. instance.expensive(1000).then( count => {
  4. console.log(`Ran ${count} loops`)
  5. })

Credit

The inner workings here are heavily inspired by worker-loader. It’s worth a read!

License

MIT License © Jason Miller