native forEach vs lodash

Benchmark created on


Preparation HTML

<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.23/lodash.min.js"></script>

Setup

function generateRes(size) {
  const res = {};
  const sections = ["user", "settings", "profile", "meta", "permissions"];

  for (let i = 0; i < size; i++) {
    const s = sections[i % sections.length];

    if (i % 3 === 0) res[`${s}.${i}.label`] = "L" + i;
    else if (i % 3 === 1) res[`${s}.${i}.value`] = "V" + i;
    else res[`field_${i}`] = "F" + i;
  }

  return res;
}

const res = generateRes(50000);
let sink = 0;

Test runner

Ready to run.

Testing in
TestOps/sec
native
const cleanRes = {};

Object.entries(res).forEach(([key, value]) => {
  if (key.indexOf(".") > -1) {
    const parts = key.split(".");
    cleanRes[parts[0]] = value;
  } else {
    cleanRes[key] = value;
  }

  sink += key.length;
});

sink += Object.keys(cleanRes).length;
ready
lodash
const cleanRes = {};

_.forEach(res, function(value, key) {
  if (key.indexOf(".") > -1) {
    const parts = key.split(".");
    cleanRes[parts[0]] = value;
  } else {
    cleanRes[key] = value;
  }

  sink += key.length;
});

sink += Object.keys(cleanRes).length;
ready

Revisions

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