Event Loop Yielder
A collection of strategies for yielding to the event loop, to avoid blocking for too long.
Install
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.
import {makeImmediateYielder} from 'event-loop-yielder';
const yielder = makeImmediateYielder ();
for ( let i = 0; i < 1000000; i++ ) {
if ( i % 100 ) {
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
.
import {makeIntervalYielder} from 'event-loop-yielder';
const yielder = makeIntervalYielder ( 16 );
for ( let i = 0; i < 1000000; i++ ) {
await yielder ();
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.
import {makeTimeoutYielder} from 'event-loop-yielder';
const yielder = makeTimeoutYielder ();
for ( let i = 0; i < 1000000; i++ ) {
if ( i % 100 ) {
await yielder ();
}
runSomeComputation ();
}
License
MIT © Fabio Spampinato