Chunker comparison

Benchmark created on


Setup

const data = Array.from({ length: 100_000 }, (_, i) => i);
const chunkSize = 100;

function* chunkGenerator(data, chunkSize) {
  for (let i = 0; i < data.length; i += chunkSize) {
    yield data.slice(i, i + chunkSize);
  }
}

Test runner

Ready to run.

Testing in
TestOps/sec
Array.from and splice
const chunks = Array.from({ length: Math.ceil(data.length / chunkSize) }, (_, i) =>
  data.slice(i * chunkSize, (i + 1) * chunkSize)
);
ready
Generator
const gen = chunkGenerator(data, chunkSize);
const chunks = [];
for (const chunk of gen) {
  chunks.push(chunk);
}
ready
Reduce and push
const chunks = data.reduce((acc, _, i) => {
  if (i % chunkSize === 0) acc.push([]);
  acc[acc.length - 1].push(data[i]);
  return acc;
}, []);
ready
Reduce with NCA
const chunks = data.reduce((acc, item, i) => {
  const group = Math.floor(i / chunkSize);
  acc[group] ??= [];
  acc[group].push(item);
  return acc;
}, []);
ready

Revisions

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