diff --git a/benchmark/all.js b/benchmark/all.js new file mode 100644 index 0000000..0f464be --- /dev/null +++ b/benchmark/all.js @@ -0,0 +1,5 @@ +import './bencode.js' +import './buffer-vs-string.js' +import './compare-decode.js' +import './compare-encode.js' +import './encoding-length.js' diff --git a/benchmark/bencode.js b/benchmark/bencode.js index d56afd8..290c734 100644 --- a/benchmark/bencode.js +++ b/benchmark/bencode.js @@ -1,9 +1,13 @@ import fs from 'fs' import path from 'path' -import bench from 'nanobench' +import { fileURLToPath } from 'url' +import { Bench } from 'tinybench' import bencode from '../index.js' +const __filename = fileURLToPath(import.meta.url) +const __dirname = path.dirname(__filename) + const buffer = fs.readFileSync(path.join(__dirname, 'test.torrent')) const object = bencode.decode(buffer) const objectUtf8 = bencode.decode(buffer, 'utf8') @@ -12,7 +16,9 @@ const objectBinary = bencode.decode(buffer, 'binary') const ITERATIONS = 10000 -bench(`bencode.encode() [buffer] ⨉ ${ITERATIONS}`, function (run) { +const bench = new Bench({ time: 100 }) + +bench.add(`bencode.encode() [buffer] ⨉ ${ITERATIONS}`, function (run) { let result = null run.start() @@ -24,7 +30,7 @@ bench(`bencode.encode() [buffer] ⨉ ${ITERATIONS}`, function (run) { return result }) -bench(`bencode.encode() [utf8] ⨉ ${ITERATIONS}`, function (run) { +bench.add(`bencode.encode() [utf8] ⨉ ${ITERATIONS}`, function (run) { let result = null run.start() @@ -36,7 +42,7 @@ bench(`bencode.encode() [utf8] ⨉ ${ITERATIONS}`, function (run) { return result }) -bench(`bencode.encode() [ascii] ⨉ ${ITERATIONS}`, function (run) { +bench.add(`bencode.encode() [ascii] ⨉ ${ITERATIONS}`, function (run) { let result = null run.start() @@ -48,7 +54,7 @@ bench(`bencode.encode() [ascii] ⨉ ${ITERATIONS}`, function (run) { return result }) -bench(`bencode.encode() [binary] ⨉ ${ITERATIONS}`, function (run) { +bench.add(`bencode.encode() [binary] ⨉ ${ITERATIONS}`, function (run) { let result = null run.start() @@ -60,7 +66,7 @@ bench(`bencode.encode() [binary] ⨉ ${ITERATIONS}`, function (run) { return result }) -bench(`bencode.decode() [buffer] ⨉ ${ITERATIONS}`, function (run) { +bench.add(`bencode.decode() [buffer] ⨉ ${ITERATIONS}`, function (run) { let result = null run.start() @@ -72,7 +78,7 @@ bench(`bencode.decode() [buffer] ⨉ ${ITERATIONS}`, function (run) { return result }) -bench(`bencode.decode() [utf8] ⨉ ${ITERATIONS}`, function (run) { +bench.add(`bencode.decode() [utf8] ⨉ ${ITERATIONS}`, function (run) { let result = null run.start() @@ -84,7 +90,7 @@ bench(`bencode.decode() [utf8] ⨉ ${ITERATIONS}`, function (run) { return result }) -bench(`bencode.decode() [ascii] ⨉ ${ITERATIONS}`, function (run) { +bench.add(`bencode.decode() [ascii] ⨉ ${ITERATIONS}`, function (run) { let result = null run.start() @@ -96,7 +102,7 @@ bench(`bencode.decode() [ascii] ⨉ ${ITERATIONS}`, function (run) { return result }) -bench(`bencode.decode() [binary] ⨉ ${ITERATIONS}`, function (run) { +bench.add(`bencode.decode() [binary] ⨉ ${ITERATIONS}`, function (run) { let result = null run.start() @@ -107,3 +113,7 @@ bench(`bencode.decode() [binary] ⨉ ${ITERATIONS}`, function (run) { return result }) + +await bench.run() + +console.table(bench.table()) diff --git a/benchmark/buffer-vs-string.js b/benchmark/buffer-vs-string.js index 0caa0a7..20d8a5e 100644 --- a/benchmark/buffer-vs-string.js +++ b/benchmark/buffer-vs-string.js @@ -1,14 +1,21 @@ import fs from 'fs' import path from 'path' +import { fileURLToPath } from 'url' import bencode from '../index.js' -import bench from 'nanobench' + +import { Bench } from 'tinybench' + +const __filename = fileURLToPath(import.meta.url) +const __dirname = path.dirname(__filename) const buffer = fs.readFileSync(path.join(__dirname, 'test.torrent')) const str = buffer.toString('ascii') const ITERATIONS = 10000 -bench(`decode buffer ⨉ ${ITERATIONS}`, function (run) { +const bench = new Bench({ time: 100 }) + +bench.add(`decode buffer ⨉ ${ITERATIONS}`, function (run) { let result = null run.start() @@ -20,7 +27,7 @@ bench(`decode buffer ⨉ ${ITERATIONS}`, function (run) { return result }) -bench(`decode string ⨉ ${ITERATIONS}`, function (run) { +bench.add(`decode string ⨉ ${ITERATIONS}`, function (run) { let result = null run.start() @@ -31,3 +38,7 @@ bench(`decode string ⨉ ${ITERATIONS}`, function (run) { return result }) + +await bench.run() + +console.table(bench.table()) diff --git a/benchmark/compare-decode.js b/benchmark/compare-decode.js index 920e970..f2addad 100644 --- a/benchmark/compare-decode.js +++ b/benchmark/compare-decode.js @@ -1,19 +1,26 @@ import fs from 'fs' import path from 'path' -import bench from 'nanobench' +import { fileURLToPath } from 'url' +import { Bench } from 'tinybench' import bencode from '../index.js' + import bencoding from 'bencoding' import bncode from 'bncode' import btparse from 'btparse' -import dht from 'dht.js/lib/dht/bencode' +import dht from 'dht.js/lib/dht/bencode.js' import dhtBencode from 'dht-bencode' +const __filename = fileURLToPath(import.meta.url) +const __dirname = path.dirname(__filename) + const buffer = fs.readFileSync(path.join(__dirname, 'test.torrent')) const ITERATIONS = 10000 -bench(`bencode.decode() ⨉ ${ITERATIONS}`, function (run) { +const bench = new Bench({ time: 100 }) + +bench.add(`bencode.decode() ⨉ ${ITERATIONS}`, function (run) { let result = null run.start() @@ -25,7 +32,7 @@ bench(`bencode.decode() ⨉ ${ITERATIONS}`, function (run) { return result }) -bench(`bencoding.decode() ⨉ ${ITERATIONS}`, function (run) { +bench.add(`bencoding.decode() ⨉ ${ITERATIONS}`, function (run) { let result = null run.start() @@ -37,7 +44,7 @@ bench(`bencoding.decode() ⨉ ${ITERATIONS}`, function (run) { return result }) -bench(`bncode.decode() ⨉ ${ITERATIONS}`, function (run) { +bench.add(`bncode.decode() ⨉ ${ITERATIONS}`, function (run) { let result = null run.start() @@ -49,7 +56,7 @@ bench(`bncode.decode() ⨉ ${ITERATIONS}`, function (run) { return result }) -bench(`btparse() ⨉ ${ITERATIONS}`, function (run) { +bench.add(`btparse() ⨉ ${ITERATIONS}`, function (run) { let result = null run.start() @@ -61,7 +68,7 @@ bench(`btparse() ⨉ ${ITERATIONS}`, function (run) { return result }) -bench(`dht.decode() ⨉ ${ITERATIONS}`, function (run) { +bench.add(`dht.decode() ⨉ ${ITERATIONS}`, function (run) { let result = null run.start() @@ -73,7 +80,7 @@ bench(`dht.decode() ⨉ ${ITERATIONS}`, function (run) { return result }) -bench(`dhtBencode.decode() ⨉ ${ITERATIONS}`, function (run) { +bench.add(`dhtBencode.decode() ⨉ ${ITERATIONS}`, function (run) { let result = null run.start() @@ -84,3 +91,7 @@ bench(`dhtBencode.decode() ⨉ ${ITERATIONS}`, function (run) { return result }) + +await bench.run() + +console.table(bench.table()) diff --git a/benchmark/compare-encode.js b/benchmark/compare-encode.js index 179b409..fb6d319 100644 --- a/benchmark/compare-encode.js +++ b/benchmark/compare-encode.js @@ -1,19 +1,26 @@ import fs from 'fs' import path from 'path' -import bench from 'nanobench' +import { fileURLToPath } from 'url' +import { Bench } from 'tinybench' import bencode from '../index.js' + import bencoding from 'bencoding' import bncode from 'bncode' -import dht from 'dht.js/lib/dht/bencode' +import dht from 'dht.js/lib/dht/bencode.js' import dhtBencode from 'dht-bencode' +const __filename = fileURLToPath(import.meta.url) +const __dirname = path.dirname(__filename) + const buffer = fs.readFileSync(path.join(__dirname, 'test.torrent')) const object = bencode.decode(buffer) const ITERATIONS = 10000 -bench(`bencode.encode() ⨉ ${ITERATIONS}`, function (run) { +const bench = new Bench({ time: 100 }) + +bench.add(`bencode.encode() ⨉ ${ITERATIONS}`, function (run) { let result = null run.start() @@ -25,7 +32,7 @@ bench(`bencode.encode() ⨉ ${ITERATIONS}`, function (run) { return result }) -bench(`bencoding.encode() ⨉ ${ITERATIONS}`, function (run) { +bench.add(`bencoding.encode() ⨉ ${ITERATIONS}`, function (run) { let result = null run.start() @@ -37,7 +44,7 @@ bench(`bencoding.encode() ⨉ ${ITERATIONS}`, function (run) { return result }) -bench(`bncode.encode() ⨉ ${ITERATIONS}`, function (run) { +bench.add(`bncode.encode() ⨉ ${ITERATIONS}`, function (run) { let result = null run.start() @@ -49,7 +56,7 @@ bench(`bncode.encode() ⨉ ${ITERATIONS}`, function (run) { return result }) -bench(`dht.encode() ⨉ ${ITERATIONS}`, function (run) { +bench.add(`dht.encode() ⨉ ${ITERATIONS}`, function (run) { let result = null run.start() @@ -61,7 +68,7 @@ bench(`dht.encode() ⨉ ${ITERATIONS}`, function (run) { return result }) -bench(`dhtBencode.encode() ⨉ ${ITERATIONS}`, function (run) { +bench.add(`dhtBencode.encode() ⨉ ${ITERATIONS}`, function (run) { let result = null run.start() @@ -72,3 +79,7 @@ bench(`dhtBencode.encode() ⨉ ${ITERATIONS}`, function (run) { return result }) + +await bench.run() + +console.table(bench.table()) diff --git a/benchmark/encoding-length.js b/benchmark/encoding-length.js index 7f300bf..747a26a 100644 --- a/benchmark/encoding-length.js +++ b/benchmark/encoding-length.js @@ -1,14 +1,21 @@ import fs from 'fs' import path from 'path' +import { fileURLToPath } from 'url' import bencode from '../index.js' -import bench from 'nanobench' + +import { Bench } from 'tinybench' + +const __filename = fileURLToPath(import.meta.url) +const __dirname = path.dirname(__filename) const buffer = fs.readFileSync(path.join(__dirname, 'test.torrent')) const torrent = bencode.decode(buffer) const ITERATIONS = 10000 -bench('bencode.encodingLength(torrent)', function (run) { +const bench = new Bench({ time: 100 }) + +bench.add('bencode.encodingLength(torrent)', function (run) { const result = null run.start() @@ -20,7 +27,7 @@ bench('bencode.encodingLength(torrent)', function (run) { return result }) -bench('bencode.encodingLength(buffer)', function (run) { +bench.add('bencode.encodingLength(buffer)', function (run) { const result = null run.start() @@ -32,7 +39,7 @@ bench('bencode.encodingLength(buffer)', function (run) { return result }) -bench('bencode.encodingLength(string)', function (run) { +bench.add('bencode.encodingLength(string)', function (run) { const result = null run.start() @@ -44,7 +51,7 @@ bench('bencode.encodingLength(string)', function (run) { return result }) -bench('bencode.encodingLength(number)', function (run) { +bench.add('bencode.encodingLength(number)', function (run) { const result = null run.start() @@ -56,7 +63,7 @@ bench('bencode.encodingLength(number)', function (run) { return result }) -bench('bencode.encodingLength(array)', function (run) { +bench.add('bencode.encodingLength(array)', function (run) { const result = null run.start() @@ -68,7 +75,7 @@ bench('bencode.encodingLength(array)', function (run) { return result }) -bench('bencode.encodingLength(small object)', function (run) { +bench.add('bencode.encodingLength(small object)', function (run) { const result = null run.start() @@ -79,3 +86,7 @@ bench('bencode.encodingLength(small object)', function (run) { return result }) + +await bench.run() + +console.table(bench.table()) diff --git a/package.json b/package.json index be55cb3..d58e1c7 100644 --- a/package.json +++ b/package.json @@ -26,11 +26,11 @@ "btparse": "latest", "dht-bencode": "latest", "dht.js": "latest", - "nanobench": "3.0.0", "semantic-release": "21.1.1", "standard": "17.1.0", "tap-spec": "5.0.0", - "tape": "5.6.6" + "tape": "5.6.6", + "tinybench": "^2.5.0" }, "keywords": [ "bdecode", @@ -51,7 +51,7 @@ "url": "git://github.com/webtorrent/node-bencode.git" }, "scripts": { - "benchmark": "nanobench benchmark/*.js", + "benchmark": "node benchmark/all.js", "bundle": "mkdir -p dist && npm run bundle:lib && npm run bundle:test", "bundle:lib": "browserify lib/index.js -s bencode -o dist/bencode.js", "bundle:test": "browserify test/*.test.js -o dist/tests.js",