]> git.ardis.lu - csvio/commitdiff
Add initial benchmarks
authorArdis Lu <ardisglu@gmail.com>
Fri, 7 Feb 2025 07:39:55 +0000 (23:39 -0800)
committerArdis Lu <ardisglu@gmail.com>
Fri, 7 Feb 2025 07:39:55 +0000 (23:39 -0800)
benchmark/core.bench.js [new file with mode: 0644]
benchmark/utils.js [new file with mode: 0644]
package.json

diff --git a/benchmark/core.bench.js b/benchmark/core.bench.js
new file mode 100644 (file)
index 0000000..beb2788
--- /dev/null
@@ -0,0 +1,22 @@
+import { unlinkSync } from 'node:fs';
+
+import { benchmark } 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));
+
+await benchmark('Write 100MB', async () => {
+  await createRandomCSV(100000, 100, 2).pipeTo(new CSVWriter(temp));
+});
+
+await benchmark('Read 100MB', async () => {
+  const r = new CSVReader(temp);
+  for await (const _ of r) { }
+});
+
+await benchmark('Transform 100MB', async () => {
+  const r = createRandomCSV(100000, 100, 2).pipeThrough(new CSVTransformer(r => r.map(f => Number(f) + 1)));
+  for await (const _ of r) { }
+});
diff --git a/benchmark/utils.js b/benchmark/utils.js
new file mode 100644 (file)
index 0000000..f2798eb
--- /dev/null
@@ -0,0 +1,16 @@
+import { styleText } from 'node:util';
+
+export async function benchmark(name, fn) {
+  performance.mark('start');
+  await fn();
+  performance.mark('end');
+  performance.measure('measure', 'start', 'end');
+
+  const measures = performance.getEntriesByType('measure');
+  const { duration } = measures[0];
+
+  console.log(`${styleText('green', name)} | ${styleText(['yellow', 'underline'], `${duration.toFixed(3)}ms`)} execution time`);
+
+  performance.clearMarks();
+  performance.clearMeasures();
+}
index 026b024d4631c0ea17adb878ffc95bafce123a2d..d8eaf575e08f811408814e1e5e2e888eada69a79 100644 (file)
@@ -16,6 +16,7 @@
   "scripts": {
     "test": "node --test --test-skip-pattern=\"/^large:*/\"",
     "test:large": "node --test --test-name-pattern=\"/^large:*/\"",
-    "test:coverage": "npm run test -- --experimental-test-coverage"
+    "test:coverage": "npm run test -- --experimental-test-coverage",
+    "bench": "node ./benchmark/core.bench.js"
   }
 }
This page took 0.040842 seconds and 4 git commands to generate.