HTML Preparation code:
AخA
 
1
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.28.0/ramda.min.js"></script>
2
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.min.js"></script>
Script Preparation code:
x
 
var data = _.range(100000).map(function(i) {
  return {
    counter: i
  }
});
function isOdd(num) {
  return num % 2 === 1;
}
function square(num) {
  return num * num;
}
function lessThanThreeDigits(num) {
  return num.toString().length < 3;
}
Tests:
  • JS native

     
    var result = data
      .map(({counter}) => counter)
      .filter(isOdd)
      .map(square)
      .filter(lessThanThreeDigits)
  • Ramda with transducer

     
    var transducer = R.compose (
      R.map(R.prop('counter')),
      R.filter(isOdd),
      R.map(square),
      R.filter(lessThanThreeDigits),
    );
    var result = R.transduce (
      transducer,
      (acc, val) => {
        acc.push(val);
        return acc;
      },
      [],
      data,
    );
  • Ramda with transducer (no prop)

     
    var transducer = R.compose (
      R.map(({counter}) => counter),
      R.filter(isOdd),
      R.map(square),
      R.filter(lessThanThreeDigits),
    );
    var result = R.transduce (
      transducer,
      (acc, val) => {
        acc.push(val);
        return acc;
      },
      [],
      data,
    );
  • Ramda with currying and composition

     
    var result = R.pipe(
      R.pluck('counter'),
      R.filter(isOdd),
      R.map(square),
      R.filter(lessThanThreeDigits)
    )(data);
  • Ramda without relying on currying or composition

     
    var result = R.filter(lessThanThreeDigits,
      R.map(square,
        R.filter(isOdd,
          R.pluck('counter', data))));
  • Ramda with currying and composition (no pluck)

     
    var result = R.pipe(
      R.map (({counter}) => counter),
      R.filter(isOdd),
      R.map(square),
      R.filter(lessThanThreeDigits)
    )(data);
  • Lodash

     
    var result = _.chain(data)
      .map('counter')
      .filter(isOdd)
      .map(square)
      .filter(lessThanThreeDigits)
      .value();
  • js native loops

     
    let result = [];
    for (let i=0; i<data.length; i++) {
      const { counter } = data[i];
      if (isOdd (counter)) {
        console.log ('t', counter);
        let squared = square (counter);
        if (lessThanThreeDigits (squared)) {
          result.push (squared);
        }
      }
    }
Rendered benchmark preparation results:

Suite status: <idle, ready to run>

Previous results

Experimental features:

  • Test case name Result
    JS native
    Ramda with transducer
    Ramda with transducer (no prop)
    Ramda with currying and composition
    Ramda without relying on currying or composition
    Ramda with currying and composition (no pluck)
    Lodash
    js native loops

    Fastest: N/A

    Slowest: N/A

Latest run results:
Run details: (Test run date: one year ago)
Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:121.0) Gecko/20100101 Firefox/121.0
Firefox 121 on Windows
View result in a separate tab
Test name Executions per second
JS native 187.7 Ops/sec
Ramda with transducer 65.4 Ops/sec
Ramda with transducer (no prop) 161.5 Ops/sec
Ramda with currying and composition 73.5 Ops/sec
Ramda without relying on currying or composition 99.0 Ops/sec
Ramda with currying and composition (no pluck) 186.3 Ops/sec
Lodash 174.7 Ops/sec
js native loops 3.9 Ops/sec