1
- ## Benchmark
1
+ # Benchmark
2
2
3
- Below is a comparison of body-parser and milliparsec in terms of parsing a request with JSON payload .
3
+ Below are benchmarks of body-parser vs milliparsec and formidable vs milliparsec. Please take into account that these benchmarks are not entirely accurate, since they are taken on a regular desktop computer in usual conditions .
4
4
5
- ### Environment
5
+ ## Environment
6
6
7
7
- Node.js 22.3.0
8
- - System: Linux 6.9.7
8
+ - System: Linux 6.10.10
9
+ - CPU: Intel Core i9-13900H
9
10
- Machine: Asus ROG Zephyrus G16
10
11
12
+ ## JSON parsing
13
+
11
14
### Benchmark command:
12
15
13
16
``` sh
@@ -22,20 +25,20 @@ body-parser result:
22
25
┌─────────┬──────┬──────┬───────┬──────┬─────────┬─────────┬────────┐
23
26
│ Stat │ 2.5% │ 50% │ 97.5% │ 99% │ Avg │ Stdev │ Max │
24
27
├─────────┼──────┼──────┼───────┼──────┼─────────┼─────────┼────────┤
25
- │ Latency │ 0 ms │ 0 ms │ 0 ms │ 0 ms │ 0.01 ms │ 0.79 ms │ 251 ms │
28
+ │ Latency │ 0 ms │ 0 ms │ 0 ms │ 0 ms │ 0.01 ms │ 0.81 ms │ 258 ms │
26
29
└─────────┴──────┴──────┴───────┴──────┴─────────┴─────────┴────────┘
27
30
┌───────────┬─────────┬─────────┬─────────┬─────────┬───────────┬──────────┬─────────┐
28
31
│ Stat │ 1% │ 2.5% │ 50% │ 97.5% │ Avg │ Stdev │ Min │
29
32
├───────────┼─────────┼─────────┼─────────┼─────────┼───────────┼──────────┼─────────┤
30
- │ Req/Sec │ 31,231 │ 31,231 │ 42,815 │ 43,935 │ 41,823.28 │ 3,470.88 │ 31,224 │
33
+ │ Req/Sec │ 33,055 │ 33,055 │ 44,095 │ 45,055 │ 42,820.37 │ 3,265.01 │ 33,046 │
31
34
├───────────┼─────────┼─────────┼─────────┼─────────┼───────────┼──────────┼─────────┤
32
- │ Bytes/Sec │ 4.03 MB │ 4.03 MB │ 5.52 MB │ 5.67 MB │ 5.39 MB │ 448 kB │ 4.03 MB │
35
+ │ Bytes/Sec │ 4.26 MB │ 4.26 MB │ 5.69 MB │ 5.81 MB │ 5.52 MB │ 421 kB │ 4.26 MB │
33
36
└───────────┴─────────┴─────────┴─────────┴─────────┴───────────┴──────────┴─────────┘
34
37
35
38
Req/Bytes counts sampled once per second.
36
39
# of samples: 11
37
40
38
- 460k requests in 11.02s, 59.3 MB read
41
+ 471k requests in 11.03s, 60.8 MB read
39
42
```
40
43
41
44
milliparsec result:
@@ -44,22 +47,80 @@ milliparsec result:
44
47
┌─────────┬──────┬──────┬───────┬──────┬─────────┬─────────┬────────┐
45
48
│ Stat │ 2.5% │ 50% │ 97.5% │ 99% │ Avg │ Stdev │ Max │
46
49
├─────────┼──────┼──────┼───────┼──────┼─────────┼─────────┼────────┤
47
- │ Latency │ 0 ms │ 0 ms │ 0 ms │ 0 ms │ 0.01 ms │ 0.65 ms │ 254 ms │
50
+ │ Latency │ 0 ms │ 0 ms │ 0 ms │ 0 ms │ 0.01 ms │ 0.64 ms │ 252 ms │
48
51
└─────────┴──────┴──────┴───────┴──────┴─────────┴─────────┴────────┘
49
- ┌───────────┬─────────┬─────────┬─────────┬─────────┬───────────┬──────────┬────────┐
50
- │ Stat │ 1% │ 2.5% │ 50% │ 97.5% │ Avg │ Stdev │ Min │
51
- ├───────────┼─────────┼─────────┼─────────┼─────────┼───────────┼──────────┼────────┤
52
- │ Req/Sec │ 52,511 │ 52,511 │ 63,007 │ 67,455 │ 63,397.82 │ 4,255.42 │ 52,480 │
53
- ├───────────┼─────────┼─────────┼─────────┼─────────┼───────────┼──────────┼────────┤
54
- │ Bytes/Sec │ 6.41 MB │ 6.41 MB │ 7.69 MB │ 8.23 MB │ 7.74 MB │ 519 kB │ 6.4 MB │
55
- └───────────┴─────────┴─────────┴─────────┴─────────┴───────────┴──────────┴────────┘
52
+ ┌───────────┬─────────┬─────────┬─────────┬─────────┬───────────┬──────────┬───────── ┐
53
+ │ Stat │ 1% │ 2.5% │ 50% │ 97.5% │ Avg │ Stdev │ Min │
54
+ ├───────────┼─────────┼─────────┼─────────┼─────────┼───────────┼──────────┼───────── ┤
55
+ │ Req/Sec │ 50,751 │ 50,751 │ 63,423 │ 67,071 │ 63,610.19 │ 4,416.72 │ 50,739 │
56
+ ├───────────┼─────────┼─────────┼─────────┼─────────┼───────────┼──────────┼───────── ┤
57
+ │ Bytes/Sec │ 6.19 MB │ 6.19 MB │ 7.74 MB │ 8.18 MB │ 7.76 MB │ 538 kB │ 6.19 MB │
58
+ └───────────┴─────────┴─────────┴─────────┴─────────┴───────────┴──────────┴───────── ┘
56
59
57
60
Req/Bytes counts sampled once per second.
58
61
# of samples: 11
59
62
60
- 697k requests in 11.02s, 85.1 MB rea
63
+ 700k requests in 11.02s, 85.4 MB read
64
+ ```
65
+
66
+ ### Verdict
67
+
68
+ milliparsec, on average, is ~ 30-40% faster.
69
+
70
+ ## Multipart with files
71
+
72
+ ### Benchmark command:
73
+
74
+ ``` sh
75
+ autocannon -m POST --form ' { "file": { "type": "file", "path": "./file.txt" } }' localhost:3004
76
+ ```
77
+
78
+ ### Results
79
+
80
+ formidable result:
81
+
82
+ ```
83
+ ┌─────────┬──────┬──────┬───────┬───────┬─────────┬─────────┬────────┐
84
+ │ Stat │ 2.5% │ 50% │ 97.5% │ 99% │ Avg │ Stdev │ Max │
85
+ ├─────────┼──────┼──────┼───────┼───────┼─────────┼─────────┼────────┤
86
+ │ Latency │ 1 ms │ 8 ms │ 26 ms │ 32 ms │ 9.73 ms │ 8.81 ms │ 256 ms │
87
+ └─────────┴──────┴──────┴───────┴───────┴─────────┴─────────┴────────┘
88
+ ┌───────────┬─────────┬─────────┬────────┬────────┬────────┬────────┬─────────┐
89
+ │ Stat │ 1% │ 2.5% │ 50% │ 97.5% │ Avg │ Stdev │ Min │
90
+ ├───────────┼─────────┼─────────┼────────┼────────┼────────┼────────┼─────────┤
91
+ │ Req/Sec │ 420 │ 420 │ 690 │ 2,517 │ 974.7 │ 627.32 │ 420 │
92
+ ├───────────┼─────────┼─────────┼────────┼────────┼────────┼────────┼─────────┤
93
+ │ Bytes/Sec │ 83.2 kB │ 83.2 kB │ 137 kB │ 498 kB │ 193 kB │ 124 kB │ 83.2 kB │
94
+ └───────────┴─────────┴─────────┴────────┴────────┴────────┴────────┴─────────┘
95
+
96
+ Req/Bytes counts sampled once per second.
97
+ # of samples: 10
98
+
99
+ 10k requests in 10.03s, 1.93 MB read
100
+ ```
101
+
102
+ milliparsec result:
103
+
104
+ ```
105
+ ┌─────────┬──────┬──────┬───────┬──────┬─────────┬─────────┬────────┐
106
+ │ Stat │ 2.5% │ 50% │ 97.5% │ 99% │ Avg │ Stdev │ Max │
107
+ ├─────────┼──────┼──────┼───────┼──────┼─────────┼─────────┼────────┤
108
+ │ Latency │ 0 ms │ 0 ms │ 1 ms │ 1 ms │ 0.21 ms │ 2.15 ms │ 375 ms │
109
+ └─────────┴──────┴──────┴───────┴──────┴─────────┴─────────┴────────┘
110
+ ┌───────────┬────────┬────────┬─────────┬─────────┬─────────┬──────────┬────────┐
111
+ │ Stat │ 1% │ 2.5% │ 50% │ 97.5% │ Avg │ Stdev │ Min │
112
+ ├───────────┼────────┼────────┼─────────┼─────────┼─────────┼──────────┼────────┤
113
+ │ Req/Sec │ 6,543 │ 6,543 │ 14,607 │ 15,455 │ 13,841 │ 2,516.57 │ 6,542 │
114
+ ├───────────┼────────┼────────┼─────────┼─────────┼─────────┼──────────┼────────┤
115
+ │ Bytes/Sec │ 1.3 MB │ 1.3 MB │ 2.89 MB │ 3.06 MB │ 2.74 MB │ 498 kB │ 1.3 MB │
116
+ └───────────┴────────┴────────┴─────────┴─────────┴─────────┴──────────┴────────┘
117
+
118
+ Req/Bytes counts sampled once per second.
119
+ # of samples: 10
120
+
121
+ 138k requests in 10.03s, 27.4 MB read
61
122
```
62
123
63
- ## Verdict
124
+ ### Verdict
64
125
65
- milliparsec, on average, is ~ 34 % faster.
126
+ milliparsec, on average, is ~ 1000-1200 % faster.
0 commit comments