web-background
Version:
Running background in browser Worker
120 lines (86 loc) โข 3.41 kB
Markdown
in the background!**
Web Background is a simple yet powerful library that enables you to execute heavy computations in the background without blocking the main thread in web browsers.
- ๐ฏ **Simple API**: Execute workers instantly with a single function
- ๐ง **Automatic Context Capture**: Automatically detects and transfers external variables
- ๐ **High-Performance Caching**: Cache identical functions for faster re-execution
- ๐งน **Automatic Memory Management**: Auto-cleanup workers and cache on GC
- ๐ช **Full TypeScript Support**: Complete type safety
- ๐ฆ **Zero Dependencies**: No external dependencies
```bash
npm install web-background
yarn add web-background
pnpm add web-background
```
```typescript
import { background } from "web-background";
// Simple background execution
const heavyCalculation = background((numbers: number[]) => {
// CPU intensive task
return numbers.reduce((sum, num) => sum + Math.sqrt(num), 0);
});
// Execute without blocking main thread
const result = await heavyCalculation([1, 4, 9, 16, 25]);
console.log(result); // 15
// When external variables are needed (optional context passing)
const multiplier = 10;
const processWithContext = background(
(numbers: number[]) => numbers.map((x) => x * multiplier),
{ multiplier } // Explicit passing when needed
);
```
```typescript
// Image data processing
const processImage = background((imageData: ImageData) => {
const { data, width, height } = imageData;
const processed = new Uint8ClampedArray(data.length);
// Apply Gaussian blur
for (let i = 0; i < data.length; i += 4) {
const y = Math.floor(i / 4 / width);
const x = Math.floor(i / 4 - width * y);
processed[i] = data[i] * 0.8; // R
processed[i + 1] = data[i + 1] * 0.8; // G
processed[i + 2] = data[i + 2] * 0.8; // B
processed[i + 3] = data[i + 3]; // A
}
return new ImageData(processed, width, height);
});
// Usage
const canvas = document.querySelector("canvas");
const ctx = canvas.getContext("2d");
const originalData = ctx.getImageData(0, 0, canvas.width, canvas.height);
const blurredData = await processImage(originalData);
ctx.putImageData(blurredData, 0, 0);
```
Converts a function to run in a web worker.
**Parameters:**
- `fn`: Function to execute in the background
- `context` (optional): Explicitly pass external variables when needed
**Returns:**
- Function with the same signature as the original but returns a `Promise`
**Type:**
```typescript
type FunctionInBackground<Fn> = (
...params: Parameters<Fn>
) => Promise<ReturnType<Fn>>;
```
- Pure computation logic
- JSON serializable data (strings, numbers, arrays, objects, etc.)
- Built-in global objects like `Math`, `Date`, `JSON`
- Explicitly passed functions and variables
### โ What's Not Available
- DOM APIs (`document`, `window`, etc.)
- Web APIs (`fetch`, `localStorage`, etc. have separate worker support)
- Non-serializable data (functions, Symbols, undefined, etc.)
- ES6 module imports (context passing required in bundler environments)
**Simple Web Worker Library - Run complex tasks