Run details:
Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:121.0) Gecko/20100101 Firefox/121.0
Firefox 121
Windows
Desktop
one year ago
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
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);
        }
      }
    }