]> git.ardis.lu - csvio/commitdiff
Add 1MB benchmark
authorArdis Lu <ardisglu@gmail.com>
Mon, 10 Feb 2025 04:06:12 +0000 (20:06 -0800)
committerArdis Lu <ardisglu@gmail.com>
Mon, 10 Feb 2025 04:06:12 +0000 (20:06 -0800)
benchmark/core.bench.js
benchmark/utils.js

index beb27883d6a84dc2326f8788031103c585508f91..2e658fd54ba81655d5d2ccebb85266fb23b6cb57 100644 (file)
@@ -1,12 +1,28 @@
 import { unlinkSync } from 'node:fs';
 
-import { benchmark } from './utils.js';
+import { benchmark, benchmarkIterations } from './utils.js';
 import { CSVReader, CSVTransformer, CSVWriter } from '../src/index.js';
 import { createRandomCSV, createTempFile } from '../test/utils.js';
 
 const temp = await createTempFile();
 process.on('exit', () => unlinkSync(temp));
 
+let iter = 0;
+await benchmarkIterations('Write 1MB', 20, async () => {
+  await createRandomCSV(1000, 100, iter++).pipeTo(new CSVWriter(temp));
+});
+
+await benchmarkIterations('Read 1MB', 20, async () => {
+  const r = new CSVReader(temp);
+  for await (const _ of r) { }
+});
+
+iter = 0
+await benchmarkIterations('Transform 1MB', 20, async () => {
+  const r = createRandomCSV(1000, 100, iter++).pipeThrough(new CSVTransformer(r => r.map(f => Number(f) + 1)));
+  for await (const _ of r) { }
+});
+
 await benchmark('Write 100MB', async () => {
   await createRandomCSV(100000, 100, 2).pipeTo(new CSVWriter(temp));
 });
index f2798eb63bf9495bc423d8495635969a78d78301..20b826a0ec515304ec762ff217cacad7b0584f7c 100644 (file)
@@ -14,3 +14,20 @@ export async function benchmark(name, fn) {
   performance.clearMarks();
   performance.clearMeasures();
 }
+
+export async function benchmarkIterations(name, iterations, fn) {
+  for (let i = 0; i < iterations; i++) {
+    performance.mark(`start:${i}`);
+    await fn();
+    performance.mark(`end:${i}`);
+    performance.measure(`measure:${i}`, `start:${i}`, `end:${i}`);
+  };
+
+  const measures = performance.getEntriesByType('measure');
+  const average = measures.reduce(((a, c) => a + c.duration), 0) / measures.length;
+
+  console.log(`${styleText('green', name)} | ${styleText(['yellow', 'underline'], `${average.toFixed(3)}ms`)} average execution time in ${styleText(['yellow', 'underline'], iterations.toString())} iterations`);
+
+  performance.clearMarks();
+  performance.clearMeasures();
+}
This page took 0.034934 seconds and 4 git commands to generate.