Skip to content

Commit 8aef35c

Browse files
committed
fix benchmarks: replace nanobench with bipbip
1 parent b4f43ea commit 8aef35c

File tree

11 files changed

+377
-95
lines changed

11 files changed

+377
-95
lines changed

benchmark/benchmarks.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
// workaround: name of first suite is not printed
2+
console.log('reference before benchmarks')
3+
4+
import './reference-before.js'
5+
6+
import './bencode.js'
7+
import './buffer-vs-string.js'
8+
import './compare-decode.js'
9+
import './compare-encode.js'
10+
import './encoding-length.js'
11+
12+
import './reference-after.js'

benchmark/benchmarks.json

Lines changed: 237 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,237 @@
1+
{
2+
"suites": [
3+
{
4+
"name": "reference before benchmarks",
5+
"scenarios": [
6+
{
7+
"name": "fibonacci loop",
8+
"executions": 1000000,
9+
"time": 559.685652,
10+
"error": 3.1487334028716933
11+
},
12+
{
13+
"name": "fibonacci recursive",
14+
"executions": 7934,
15+
"time": 630177.2286362491,
16+
"error": 1.0079477172579856
17+
},
18+
{
19+
"name": "fibonacci recmemo",
20+
"executions": 629322,
21+
"time": 7945.0529029654135,
22+
"error": 0.5723554930927267
23+
}
24+
]
25+
},
26+
{
27+
"name": "bencode",
28+
"scenarios": [
29+
{
30+
"name": "bencode.encode() [buffer]",
31+
"executions": 35127,
32+
"time": 142342.0572494093,
33+
"error": 1.2212460556968496
34+
},
35+
{
36+
"name": "bencode.encode() [utf8]",
37+
"executions": 1349,
38+
"time": 3704002.3409933285,
39+
"error": 0.6776323429925276
40+
},
41+
{
42+
"name": "bencode.encode() [ascii]",
43+
"executions": 1387,
44+
"time": 3604457.93222783,
45+
"error": 0.6959704620115251
46+
},
47+
{
48+
"name": "bencode.encode() [binary]",
49+
"executions": 1384,
50+
"time": 3611082.62283237,
51+
"error": 0.886904952461389
52+
},
53+
{
54+
"name": "bencode.decode() [buffer]",
55+
"executions": 42809,
56+
"time": 116795.72767408722,
57+
"error": 0.7320742513453905
58+
},
59+
{
60+
"name": "bencode.decode() [utf8]",
61+
"executions": 2313,
62+
"time": 2161073.1547773452,
63+
"error": 0.6380497099955478
64+
},
65+
{
66+
"name": "bencode.decode() [ascii]",
67+
"executions": 2409,
68+
"time": 2074895.296803653,
69+
"error": 0.5471675241633337
70+
},
71+
{
72+
"name": "bencode.decode() [binary]",
73+
"executions": 2396,
74+
"time": 2086413.753338898,
75+
"error": 0.5403395352166391
76+
}
77+
]
78+
},
79+
{
80+
"name": "buffer vs string",
81+
"scenarios": [
82+
{
83+
"name": "decode buffer",
84+
"executions": 45024,
85+
"time": 111051.06445451315,
86+
"error": 0.5052997397476986
87+
},
88+
{
89+
"name": "decode string",
90+
"executions": 27973,
91+
"time": 178745.74042827013,
92+
"error": 0.5037603579470834
93+
}
94+
]
95+
},
96+
{
97+
"name": "compare decode",
98+
"scenarios": [
99+
{
100+
"name": "bencode.decode()",
101+
"executions": 44568,
102+
"time": 112188.04153204092,
103+
"error": 0.5311823992431295
104+
},
105+
{
106+
"name": "bencoding.decode()",
107+
"executions": 54228,
108+
"time": 92203.5159696098,
109+
"error": 0.5519025773079677
110+
},
111+
{
112+
"name": "bncode.decode()",
113+
"executions": 1570,
114+
"time": 3184351.9987261146,
115+
"error": 4.031632965687692
116+
},
117+
{
118+
"name": "btparse()",
119+
"executions": 132325,
120+
"time": 37785.48271301719,
121+
"error": 0.49077930951590953
122+
},
123+
{
124+
"name": "dht.decode()",
125+
"executions": 47400,
126+
"time": 105483.08683544304,
127+
"error": 0.4728875447697615
128+
},
129+
{
130+
"name": "dhtBencode.decode()",
131+
"executions": 28774,
132+
"time": 173762.59105442412,
133+
"error": 0.4921701716738526
134+
}
135+
]
136+
},
137+
{
138+
"name": "compare encode",
139+
"scenarios": [
140+
{
141+
"name": "bencode.encode()",
142+
"executions": 37666,
143+
"time": 132742.29127064196,
144+
"error": 0.8299521400901717
145+
},
146+
{
147+
"name": "bencoding.encode()",
148+
"executions": 25,
149+
"time": 195132381.92,
150+
"error": 8.551313598927392
151+
},
152+
{
153+
"name": "bncode.encode()",
154+
"executions": 1,
155+
"time": 3939521850,
156+
"error": 0
157+
},
158+
{
159+
"name": "dht.encode()",
160+
"executions": 50,
161+
"time": 99655056.16,
162+
"error": 6.321304669124846
163+
},
164+
{
165+
"name": "dhtBencode.encode()",
166+
"executions": 14,
167+
"time": 351528698.78571427,
168+
"error": 9.904070184501599
169+
}
170+
]
171+
},
172+
{
173+
"name": "encoding length",
174+
"scenarios": [
175+
{
176+
"name": "bencode.encodingLength(torrent)",
177+
"executions": 162351,
178+
"time": 30797.4295569476,
179+
"error": 2.6093067216240846
180+
},
181+
{
182+
"name": "bencode.encodingLength(buffer)",
183+
"executions": 1000000,
184+
"time": 1151.522846,
185+
"error": 0.17154410205677803
186+
},
187+
{
188+
"name": "bencode.encodingLength(string)",
189+
"executions": 1000000,
190+
"time": 4384.510143,
191+
"error": 0.33437787838758865
192+
},
193+
{
194+
"name": "bencode.encodingLength(number)",
195+
"executions": 1000000,
196+
"time": 557.416746,
197+
"error": 0.29860269449773136
198+
},
199+
{
200+
"name": "bencode.encodingLength(array<number>)",
201+
"executions": 1000000,
202+
"time": 2784.717913,
203+
"error": 0.20104464676215553
204+
},
205+
{
206+
"name": "bencode.encodingLength(small object)",
207+
"executions": 311927,
208+
"time": 16029.371202236422,
209+
"error": 0.34310281585091806
210+
}
211+
]
212+
},
213+
{
214+
"name": "reference after benchmarks",
215+
"scenarios": [
216+
{
217+
"name": "fibonacci loop",
218+
"executions": 1000000,
219+
"time": 689.084318,
220+
"error": 0.231909777005114
221+
},
222+
{
223+
"name": "fibonacci recursive",
224+
"executions": 7080,
225+
"time": 706143.8394067796,
226+
"error": 0.963718658922282
227+
},
228+
{
229+
"name": "fibonacci recmemo",
230+
"executions": 614393,
231+
"time": 8138.115209645944,
232+
"error": 0.2215156965189563
233+
}
234+
]
235+
}
236+
]
237+
}

benchmark/bencode.js

Lines changed: 17 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,109 +1,100 @@
11
import fs from 'fs'
22
import path from 'path'
3-
import bench from 'nanobench'
3+
import { fileURLToPath } from 'url'
44

55
import bencode from '../index.js'
66

7+
const __filename = fileURLToPath(import.meta.url)
8+
const __dirname = path.dirname(__filename)
9+
710
const buffer = fs.readFileSync(path.join(__dirname, 'test.torrent'))
811
const object = bencode.decode(buffer)
912
const objectUtf8 = bencode.decode(buffer, 'utf8')
1013
const objectAscii = bencode.decode(buffer, 'ascii')
1114
const objectBinary = bencode.decode(buffer, 'binary')
1215

13-
const ITERATIONS = 10000
16+
const ITERATIONS = 1
17+
18+
suite('bencode', () => {
1419

15-
bench(`bencode.encode() [buffer]${ITERATIONS}`, function (run) {
20+
scenario(`bencode.encode() [buffer]`, function () {
1621
let result = null
1722

18-
run.start()
1923
for (let i = 0; i < ITERATIONS; i++) {
2024
result = bencode.encode(object)
2125
}
22-
run.end()
2326

2427
return result
2528
})
2629

27-
bench(`bencode.encode() [utf8]${ITERATIONS}`, function (run) {
30+
scenario(`bencode.encode() [utf8]`, function () {
2831
let result = null
2932

30-
run.start()
3133
for (let i = 0; i < ITERATIONS; i++) {
3234
result = bencode.encode(objectUtf8)
3335
}
34-
run.end()
3536

3637
return result
3738
})
3839

39-
bench(`bencode.encode() [ascii]${ITERATIONS}`, function (run) {
40+
scenario(`bencode.encode() [ascii]`, function () {
4041
let result = null
4142

42-
run.start()
4343
for (let i = 0; i < ITERATIONS; i++) {
4444
result = bencode.encode(objectAscii)
4545
}
46-
run.end()
4746

4847
return result
4948
})
5049

51-
bench(`bencode.encode() [binary]${ITERATIONS}`, function (run) {
50+
scenario(`bencode.encode() [binary]`, function () {
5251
let result = null
5352

54-
run.start()
5553
for (let i = 0; i < ITERATIONS; i++) {
5654
result = bencode.encode(objectBinary)
5755
}
58-
run.end()
5956

6057
return result
6158
})
6259

63-
bench(`bencode.decode() [buffer]${ITERATIONS}`, function (run) {
60+
scenario(`bencode.decode() [buffer]`, function () {
6461
let result = null
6562

66-
run.start()
6763
for (let i = 0; i < ITERATIONS; i++) {
6864
result = bencode.decode(buffer)
6965
}
70-
run.end()
7166

7267
return result
7368
})
7469

75-
bench(`bencode.decode() [utf8]${ITERATIONS}`, function (run) {
70+
scenario(`bencode.decode() [utf8]`, function () {
7671
let result = null
7772

78-
run.start()
7973
for (let i = 0; i < ITERATIONS; i++) {
8074
result = bencode.decode(buffer, 'utf8')
8175
}
82-
run.end()
8376

8477
return result
8578
})
8679

87-
bench(`bencode.decode() [ascii]${ITERATIONS}`, function (run) {
80+
scenario(`bencode.decode() [ascii]`, function () {
8881
let result = null
8982

90-
run.start()
9183
for (let i = 0; i < ITERATIONS; i++) {
9284
result = bencode.decode(buffer, 'ascii')
9385
}
94-
run.end()
9586

9687
return result
9788
})
9889

99-
bench(`bencode.decode() [binary]${ITERATIONS}`, function (run) {
90+
scenario(`bencode.decode() [binary]`, function () {
10091
let result = null
10192

102-
run.start()
10393
for (let i = 0; i < ITERATIONS; i++) {
10494
result = bencode.decode(buffer, 'binary')
10595
}
106-
run.end()
10796

10897
return result
10998
})
99+
100+
})

0 commit comments

Comments
 (0)