3.0.2 • Published 1 month ago

event-loop-yielder v3.0.2

Weekly downloads
-
License
-
Repository
github
Last release
1 month ago

Event Loop Yielder

A collection of strategies for yielding to the event loop, to avoid blocking for too long.

Install

npm install --save 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 ) { // // 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.

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.

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