Merging loops for speed in JavaScript
transfun.js
is a JavaScript library that lets you write map/filter/reduce
code that runs much faster than the equivalent native map/filter/reduce code
:
Usage
Instead of passing function arguments to the native array methods map/filter/reduce
to produce a result value in 1 step:
var result = arr.map((x) => x.p).filter((x) => x != null).reduce((a,b) => a + b);
…transfun.js
uses a 2-step approach: first generate very fast code, then call it:
var appfun = map( '.p' ).filter( '!=null' ).reduce( '+' );
var result = appfun( arr ); // very fast!
Usage with functions
transfun.js
also supports normal function arguments:
var appfun = map((x) => x.p ).filter((x) => x!=null ).reduce((out,v) => out+v );
var result = appfun( arr ); // fast!
…but there is a performance cost.
However, this is still much faster than the native array methods. For more about this topic, see an article about @roman01la/understanding-transducers-in-javascript-3500d3bd9624#.9mto6edg3">transducers in JavaScript
Merging loops for speed
transfun.js
automatically merges consecutive loops into one loop, then generates fast code for that loop (similar to stream fusion in Haskell).
Extensibility
A domain-specific language is used to define map/filter/reduce
. With this language, library users can define other transformations: sum, and, or
…
For the hurried ones
…you can jump directly to the speed results
https://www.npmjs.com/package/transfun
The Boost License apply, as described in the file LICENSE.