https://github.com/fabiospampinato/event-loop-yielder
A collection of strategies for yielding to the event loop, to avoid blocking for too long.
https://github.com/fabiospampinato/event-loop-yielder
event loop scheduling thread yield
Last synced: 9 months ago
JSON representation
A collection of strategies for yielding to the event loop, to avoid blocking for too long.
- Host: GitHub
- URL: https://github.com/fabiospampinato/event-loop-yielder
- Owner: fabiospampinato
- License: mit
- Created: 2022-02-08T00:07:57.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2025-01-17T20:39:38.000Z (over 1 year ago)
- Last Synced: 2025-08-09T05:50:30.604Z (10 months ago)
- Topics: event, loop, scheduling, thread, yield
- Language: TypeScript
- Homepage:
- Size: 16.6 KB
- Stars: 3
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: readme.md
- License: license
Awesome Lists containing this project
README
# Event Loop Yielder
A collection of strategies for yielding to the event loop, to avoid blocking for too long.
## Install
```sh
npm install event-loop-yielder
```
## Usage
The following functions will each make a different kind of yielder, you just call it and await its result, the yielder will decide on its own whether to actually yield to the event loop or not.
### `makeImmediateYielder`
An immediate yielder will yield to the main thread using a polyfilled `setImmediate`, which waits for microtasks, but not timeouts.
```ts
import {makeImmediateYielder} from 'event-loop-yielder';
const yielder = makeImmediateYielder ();
for ( let i = 0; i < 1000000; i++ ) {
if ( i % 100 ) { // // Yielding every 100th iteration
await yielder ();
}
runSomeComputation ();
}
```
### `makeIntervalYielder`
An interval yielder will yield to the event loop after at least `interval` number of milliseconds have elapsed since it last yielded.
It supports yielding via different strategies, by default it will use `setTimeout`.
```ts
import {makeIntervalYielder} from 'event-loop-yielder';
const yielder = makeIntervalYielder ( 16 ); // Yield after 16ms have elapsed since the last yield
for ( let i = 0; i < 1000000; i++ ) {
await yielder (); // The yielder may or may not actually yield when you call it
runSomeComputation ();
}
```
### `makeTimeoutYielder`
A timeout yielder will yield to the main thread using `setTimeout`, which usually gives a lot of time for the engine/browser to do its things.
```ts
import {makeTimeoutYielder} from 'event-loop-yielder';
const yielder = makeTimeoutYielder ();
for ( let i = 0; i < 1000000; i++ ) {
if ( i % 100 ) { // // Yielding every 100th iteration
await yielder ();
}
runSomeComputation ();
}
```
## License
MIT © Fabio Spampinato