Find a file
Anton Nesterov 975671ee34
node compat
2024-10-25 23:21:59 +02:00
__test__ init 2024-10-25 23:19:39 +02:00
.gitignore init 2024-10-25 23:19:39 +02:00
bun.lockb init 2024-10-25 23:19:39 +02:00
index.js node compat 2024-10-25 23:21:59 +02:00
jsr.json init 2024-10-25 23:19:39 +02:00
LICENSE init 2024-10-25 23:19:39 +02:00
mod.ts init 2024-10-25 23:19:39 +02:00
offload.error.ts init 2024-10-25 23:19:39 +02:00
offload.handler.ts init 2024-10-25 23:19:39 +02:00
offload.interface.ts init 2024-10-25 23:19:39 +02:00
offload.ts init 2024-10-25 23:19:39 +02:00
package.json node compat 2024-10-25 23:21:59 +02:00
README.md init 2024-10-25 23:19:39 +02:00
tsconfig.json init 2024-10-25 23:19:39 +02:00

Offload

Offload cpu-itensive tasks using WebWorkers. Offload creates a limited execution pool and can operate in two modes:

  • callback mode (default) - spawns web workers on demand when the function is called, self terminated
  • background - runs workers as backround jobs, distributes load among them, must be terminated manually

Currently uses unstable api's.

To install:

bun add githib:nesterow/offload # or pnpm

Usage

Considering following worker:

// echo.worker.ts
import { handler } from "@nesterow/offload";
declare var self: Worker;

handler(async (data: string) => {
  await new Promise((resolve) => setTimeout(resolve, 1000));
  console.log(data);
  return true;
});

In the callback mode, print() will spawn a worker and terminate it after the task is done. Maximum of 5 workers may be spawned at the same time, the rest will be queued:

import { offload } from "@nesterow/offload";

const [print, terminate] = offload<boolean, string>("./echo.worker.ts", 5);

await print("Hello, World!"); // => true

In the background mode, offload will spawn 5 workers, print() will distribute the tasks among them:

import { offload } from "@nesterow/offload";

const [print, terminate] = offload<boolean, string>("./echo.worker.ts", 5, 'bg');

await print("Hello, World!"); // => true

terminate(); // terminate all workers, for example on exit signal

License

MIT