From: Ardis Lu Date: Fri, 7 Feb 2025 07:39:55 +0000 (-0800) Subject: Add initial benchmarks X-Git-Tag: v0.1.0~70 X-Git-Url: https://git.ardis.lu/?a=commitdiff_plain;h=8ff192646b6a8a7a4793b3d9a97452468341a6a3;p=csvio Add initial benchmarks --- diff --git a/benchmark/core.bench.js b/benchmark/core.bench.js new file mode 100644 index 0000000..beb2788 --- /dev/null +++ b/benchmark/core.bench.js @@ -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 index 0000000..f2798eb --- /dev/null +++ b/benchmark/utils.js @@ -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(); +} diff --git a/package.json b/package.json index 026b024..d8eaf57 100644 --- a/package.json +++ b/package.json @@ -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" } }