mirror of
https://github.com/nesterow/offload.git
synced 2024-11-23 09:04:04 +00:00
.github/workflows | ||
__test__ | ||
.gitignore | ||
bun.lockb | ||
index.js | ||
jsr.json | ||
LICENSE | ||
mod.ts | ||
offload.error.ts | ||
offload.handler.ts | ||
offload.interface.ts | ||
offload.ts | ||
package.json | ||
README.md | ||
tsconfig.json |
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