A lightweight React library for running CPU-intensive tasks in Web Workers without blocking the main thread.
npm install react-thread-runner
- π Run heavy computations in separate threads
- π― Simple API with React hooks
- π Automatic worker pool management
- β‘ Zero dependencies
- π¦ TypeScript support
import { ThreadRunner } from 'react-thread-runner';
function MyComponent() {
const handleHeavyTask = async () => {
const runner = new ThreadRunner({ maxWorkers: 4 });
try {
const result = await runner.execute(() => {
// Your CPU-intensive code here
function fibonacci(n) {
if (n <= 1) return n;
return fibonacci(n - 1) + fibonacci(n - 2);
}
return fibonacci(40);
});
console.log('Result:', result);
} catch (error) {
console.error('Task failed:', error);
}
};
return (
<button onClick={handleHeavyTask}>
Run Heavy Task
</button>
);
}
import { useWorkerTask } from 'react-thread-runner';
function MyComponent() {
const { runTask, isLoading, error } = useWorkerTask({ maxWorkers: 4 });
const handleClick = async () => {
try {
const result = await runTask(() => {
// Your CPU-intensive code here
return heavyComputation();
});
console.log('Result:', result);
} catch (err) {
console.error('Task failed:', err);
}
};
return (
<div>
<button onClick={handleClick} disabled={isLoading}>
{isLoading ? 'Computing...' : 'Start Task'}
</button>
{error && <div>Error: {error.message}</div>}
</div>
);
}
const runner = new ThreadRunner(options);
maxWorkers
: number (optional) - Maximum number of workers to spawn (defaults to number of CPU cores)
execute<T>(task: () => T | Promise<T>): Promise<T>
- Executes a task in a worker thread
const { runTask, isLoading, error } = useWorkerTask(options);
maxWorkers
: number (optional) - Maximum number of workers to spawn
runTask<T>(task: () => T | Promise<T>): Promise<T>
- Function to run a taskisLoading
: boolean - Loading stateerror
: Error | null - Error state
Check out the examples directory for more detailed examples:
Supports all modern browsers that implement the Web Workers API.
MIT Β© Amila Kumarasekara