From: Ardis Lu Date: Mon, 10 Feb 2025 04:06:12 +0000 (-0800) Subject: Add 1MB benchmark X-Git-Tag: v0.1.0~61 X-Git-Url: https://git.ardis.lu/?a=commitdiff_plain;h=090dc9a7dfc4e999f07efabce130109425d3c680;p=csvio Add 1MB benchmark --- diff --git a/benchmark/core.bench.js b/benchmark/core.bench.js index beb2788..2e658fd 100644 --- a/benchmark/core.bench.js +++ b/benchmark/core.bench.js @@ -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)); }); diff --git a/benchmark/utils.js b/benchmark/utils.js index f2798eb..20b826a 100644 --- a/benchmark/utils.js +++ b/benchmark/utils.js @@ -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(); +}