Like a linq libraries performance (v12)

Revision 12 of this benchmark created by nin-jin on


Description

Moves the function definitions out of the running tests.

(Also removing wu, which seems to be breaking.)

Preparation HTML

<script src="https://rawgit.com/jlongster/transducers.js/master/dist/transducers.js"></script>
<script src="https://rawgit.com/nullobject/fkit/master/dist/fkit.js"></script>
<script src="https://google.github.io/traceur-compiler/bin/traceur-runtime.js"></script>
<script src="//cdn.rawgit.com/suckgamony/fromjs/999e2b611d72e28a997b304f18ee844b93759f54/from.src.js"></script>
<script src="//cdn.rawgit.com/dtao/lazy.js/7a9b0210d97168ff48c5d2b4ce4d12194ba7fbec/lazy.js"></script>
<script src="//cdn.rawgit.com/CrossEye/ramda/v0.5.0/ramda.js"></script>
<script src="//cdn.rawgit.com/mihaifm/linq/9c337383e60be3a5560959616bbca51b3eb0d27d/linq.js"></script>
<script src="//cdn.rawgit.com/lodash/lodash/ad10a1eba55e9530a09827549f56d2886a900b7f/lodash.js"></script>
<script src="//cdn.rawgit.com/megawac/ramdash/f4fb017325fea763e50933801b39b586548fbe91/ramda.js"></script>
<script src="//cdn.rawgit.com/Reactive-Extensions/IxJS/es6/dist/ix.js"></script>
<script>var lodash = _.noConflict();</script>
<script src="//cdnjs.cloudflare.com/ajax/libs/underscore.js/1.7.0/underscore.js"></script>
<script src="http://nin-jin.github.io/func/index2.js"></script>
<script>
var arr = _.range(100000),
    limit = 1000;

var odd = function(v) { return !(v%5) },
    square = function(v) { return v * v; };

var r_native = function(arr) {
    return arr.map(square).filter(odd).slice(0, limit);
};
console.log('native',r_native(arr))

var r_native2 = function(arr) {
    var res = []
    for( var i = 0 ; ( i < arr.length ) && ( res.length < limit ) ; ++i ){
        var item = square( arr[i] )
        if( !odd( item ) ) continue
        res.push( item )
    }
    return res
};
console.log('native2',r_native2(arr))

var r_underscore = function(arr) {
    return _(arr).chain().map(square).filter(odd).take(limit).value();
};
console.log('underscore',r_underscore(arr))

var r_Ix = function(arr) {
    return Ix.Enumerable.from(arr).map(square).filter(odd).take(limit).toArray();
};
console.log('Ix',r_Ix(arr))

var r_Lazy = function(arr) {
    return Lazy(arr).map(square).filter(odd).take(limit).toArray();
};
console.log('Lazy',r_Lazy(arr))

var r_lodash = function(arr) {
    return lodash(arr).map(square).filter(odd).take(limit).value();
};
console.log('lodash',r_lodash(arr))

var r_LinqJS = function(arr) { 
    return Enumerable.from(arr).select(square).where(odd).take(limit).toArray();
};
console.log('LinqJS',r_LinqJS(arr))

var r_Ramda =  R.compose(R.take(limit), R.filter(odd), R.map(square));
console.log('Ramda',r_Ramda(arr))

var r_from = function(arr) {
    return from(arr).select(square).where(odd).take(limit).toArray();
};
console.log('from',r_from(arr))

var r_Ramdash = ramda.compose(ramda.take(limit), ramda.filter(odd), ramda.map(square));
console.log('Ramdash',r_Ramdash(arr))

var transform = transducers.compose(
  transducers.map(square),
  transducers.filter(odd),
  transducers.take(limit)
);

var r_Transducers = function(arr) {
    return transducers.seq(arr, transform);
};
console.log('transducers',r_Transducers(arr))

var r_jin_func = $jin.func.pipeline([
    $jin.func.iterator() , 
    $jin.func.mapper(square) ,
    $jin.func.filter(odd) ,
    $jin.func.limiter(limit) ,
    $jin.func.collector()
])
console.log('$jin.func',r_jin_func(arr))

var r_FKit = F.compose(F.take(limit), F.filter(odd), F.map(square));
console.log('FKit',r_FKit(arr))

</script>

Test runner

Ready to run.

Testing in
TestOps/sec
Native
r_native(arr);
ready
Underscore
r_underscore(arr);
ready
Ix
r_Ix(arr);
ready
Lazy
r_Lazy(arr);
ready
Lo-Dash
r_lodash(arr);
ready
LinqJS
r_LinqJS(arr);
ready
Ramda
r_Ramda(arr);
ready
from
r_from(arr);
ready
Ramdash
r_Ramdash(arr);
 
ready
Fkit
r_FKit(arr);
ready
Transducers
r_Transducers(arr);
ready
No Dumb Native
r_native2(arr);
ready
$jin.func
r_jin_func(arr)
ready

Revisions

You can edit these tests or add more tests to this page by appending /edit to the URL.

  • Revision 1: published by Denis on
  • Revision 4: published by anon on
  • Revision 7: published by Scott Sauyet on
  • Revision 8: published by Scott Sauyet on
  • Revision 12: published by nin-jin on
  • Revision 13: published on
  • Revision 15: published by Denis Stoyanov on