Skip to content

Commit ae46b70

Browse files
author
Laurent B
committed
Adding Benchmarks tables and scripts
1 parent 7f37db4 commit ae46b70

File tree

7 files changed

+952
-1
lines changed

7 files changed

+952
-1
lines changed

README.md

+53
Original file line numberDiff line numberDiff line change
@@ -139,3 +139,56 @@ Results
139139
To respond to HTTP requests, the user's define callback will be used.
140140
HTTPS is responded by `Fastify`.
141141
`
142+
143+
## Test coverage
144+
145+
This extension has 100% coverage, both in TypeScrypt and JavaScript
146+
147+
## Benchmark
148+
149+
_You can try it yourself using `npm run benchmark`_
150+
151+
### Classic, Fastify without extension, but HTTPS only
152+
```
153+
Running 5s test @ https://localhost:3000/
154+
100 connections with 10 pipelining factor
155+
156+
┌─────────┬──────┬──────┬───────┬───────┬─────────┬─────────┬──────────┐
157+
│ Stat │ 2.5% │ 50% │ 97.5% │ 99% │ Avg │ Stdev │ Max │
158+
├─────────┼──────┼──────┼───────┼───────┼─────────┼─────────┼──────────┤
159+
│ Latency │ 0 ms │ 0 ms │ 29 ms │ 35 ms │ 4.14 ms │ 26.5 ms │ 974.2 ms │
160+
└─────────┴──────┴──────┴───────┴───────┴─────────┴─────────┴──────────┘
161+
┌───────────┬────────┬────────┬─────────┬────────┬─────────┬──────────┬────────┐
162+
│ Stat │ 1% │ 2.5% │ 50% │ 97.5% │ Avg │ Stdev │ Min │
163+
├───────────┼────────┼────────┼─────────┼────────┼─────────┼──────────┼────────┤
164+
│ Req/Sec │ 1559 │ 1559 │ 29423 │ 31695 │ 23767.8 │ 11409.48 │ 1559 │
165+
├───────────┼────────┼────────┼─────────┼────────┼─────────┼──────────┼────────┤
166+
│ Bytes/Sec │ 256 kB │ 256 kB │ 4.83 MB │ 5.2 MB │ 3.9 MB │ 1.87 MB │ 256 kB │
167+
└───────────┴────────┴────────┴─────────┴────────┴─────────┴──────────┴────────┘
168+
169+
Req/Bytes counts sampled once per second.
170+
171+
119k requests in 5.13s, 19.5 MB read
172+
```
173+
### With extension enabled, but with HTTPS only
174+
```
175+
Running 5s test @ https://localhost:3000/
176+
100 connections with 10 pipelining factor
177+
178+
┌─────────┬──────┬──────┬───────┬───────┬─────────┬──────────┬───────────┐
179+
│ Stat │ 2.5% │ 50% │ 97.5% │ 99% │ Avg │ Stdev │ Max │
180+
├─────────┼──────┼──────┼───────┼───────┼─────────┼──────────┼───────────┤
181+
│ Latency │ 0 ms │ 0 ms │ 30 ms │ 37 ms │ 4.26 ms │ 27.62 ms │ 987.77 ms │
182+
└─────────┴──────┴──────┴───────┴───────┴─────────┴──────────┴───────────┘
183+
┌───────────┬────────┬────────┬─────────┬─────────┬─────────┬──────────┬────────┐
184+
│ Stat │ 1% │ 2.5% │ 50% │ 97.5% │ Avg │ Stdev │ Min │
185+
├───────────┼────────┼────────┼─────────┼─────────┼─────────┼──────────┼────────┤
186+
│ Req/Sec │ 1351 │ 1351 │ 28415 │ 30575 │ 23140.6 │ 11063.46 │ 1351 │
187+
├───────────┼────────┼────────┼─────────┼─────────┼─────────┼──────────┼────────┤
188+
│ Bytes/Sec │ 222 kB │ 222 kB │ 4.66 MB │ 5.01 MB │ 3.79 MB │ 1.81 MB │ 222 kB │
189+
└───────────┴────────┴────────┴─────────┴─────────┴─────────┴──────────┴────────┘
190+
191+
Req/Bytes counts sampled once per second.
192+
193+
116k requests in 5.15s, 19 MB read
194+
```

benchmark/cert.pem

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
-----BEGIN CERTIFICATE-----
2+
MIIDiDCCAnCgAwIBAgIJAOPRYbqgI8yHMA0GCSqGSIb3DQEBCwUAMFkxCzAJBgNV
3+
BAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBX
4+
aWRnaXRzIFB0eSBMdGQxEjAQBgNVBAMMCWxvY2FsaG9zdDAeFw0xODEyMDMyMTQ2
5+
NDZaFw0yODExMzAyMTQ2NDZaMFkxCzAJBgNVBAYTAkFVMRMwEQYDVQQIDApTb21l
6+
LVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQxEjAQBgNV
7+
BAMMCWxvY2FsaG9zdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL2k
8+
E4OZhz8Y1QGC3zoaliRT9bcWbdARvLz9Eutlq4KSfNpobFLl+Byr6FvSjO88pie9
9+
g2vYw4mA+pee5yXuJKASGmqdQo6XAnpuXpf7BAoUDSgZxLOgWdGKAqxRHKsFV8TL
10+
LdvIr9FjBJfQGJXvLE6ClPxyOwh9HKuruzkl2TLUYkcgaT1pF9B6KJQ49JItJEij
11+
4XPtdHdgNN1R0MWTWFwWnU1iAe0PdIPPWhOjnFCesJwQ+TJ8Ie++C+rRw5QIXilF
12+
KaUrkcsMi5qmP51pOgVRnforG04S2d+/zz99sDyJR+xTBiLndvn6BpOZCtsKEiD/
13+
07sXjg4/1MQ++Vwv4H0CAwEAAaNTMFEwHQYDVR0OBBYEFKrZr8wfxZ+sKCsLT4iB
14+
1z8PEkGLMB8GA1UdIwQYMBaAFKrZr8wfxZ+sKCsLT4iB1z8PEkGLMA8GA1UdEwEB
15+
/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBABnAGnanNtCTeO1F7Cq5HlIntgm4
16+
yF7Hnu3aB0pTPDtZ1xbeeZIjjylSdDLF/9+L8YHdyxK3w3/sK3NNVzLfvg2FJtnv
17+
xyGvOqHtCyYGPytI6YbzRGXbxn3ZGX2HsG3LMk4xIzOkop2NTE5yPNvf2w19J95X
18+
cXvq5X8nhoPE24n6R7JfIBGAVNmo4K/Mj5677T/AZBdQke6sXnT2LyGr6PwjrneQ
19+
3ds2n6/Wko7l7HsqH3shoLMBeE1HVMzNUxNDbEoy7/aOMaBjEzijKpCAnxzFnM/N
20+
8NXc4VT3TFVHSfoicci8v+vq+zBK7fS/D/hthI3CSfzDVA0FoB4+PaPyBUo=
21+
-----END CERTIFICATE-----

benchmark/key.pem

+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
-----BEGIN PRIVATE KEY-----
2+
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC9pBODmYc/GNUB
3+
gt86GpYkU/W3Fm3QEby8/RLrZauCknzaaGxS5fgcq+hb0ozvPKYnvYNr2MOJgPqX
4+
nucl7iSgEhpqnUKOlwJ6bl6X+wQKFA0oGcSzoFnRigKsURyrBVfEyy3byK/RYwSX
5+
0BiV7yxOgpT8cjsIfRyrq7s5Jdky1GJHIGk9aRfQeiiUOPSSLSRIo+Fz7XR3YDTd
6+
UdDFk1hcFp1NYgHtD3SDz1oTo5xQnrCcEPkyfCHvvgvq0cOUCF4pRSmlK5HLDIua
7+
pj+daToFUZ36KxtOEtnfv88/fbA8iUfsUwYi53b5+gaTmQrbChIg/9O7F44OP9TE
8+
PvlcL+B9AgMBAAECggEASvuqP5mf8WHnLx7JFtdWUGzmNgtnRiMNRoimR28+3nT/
9+
avhpBGorrWKHkG7zDNElPYdghG8D+cWG0BajfMrprmUaDte5blnlP/WN73fwA/Aj
10+
t5xgu0mG2iRApFO6CyEksApKSqHSau9E7KX6YqZcFXrqX9rm3pdhk7tmXtVJSSAk
11+
rtgaFymZPJFSBEG3kpPxYojS6sfc3fBNO47CiIE0rdMMPsV31YnACa9VZ6wykpoF
12+
uh/lL0rOrV7fyG4tZOeMFK5KwEwqZ3TAoZ8TusEqFNfVtWTqpTaHGkjbkgaO0TnD
13+
kuy7iSJUEHjWjDLcTSKlhqrOuzb3Q42Gglr3RW2aoQKBgQDe3gLRIi2Md5SzjqXF
14+
eYh/RzUEnGroqXGwzV9ONAO3kFDMJFrAQzZg4sGCynKblqCI6Sbr1VbFBg96l85d
15+
4ZHmRqAY8urmY5rAtdN73xn81nMZtJrM2y9vbYRSCZ5r3RcMVDcL+7V0Byp9JbjS
16+
FohoF5TULR2EaCtRcB//XObwFQKBgQDZ1YW2ObkQzcqhGNyeKlJj/uRcjebxL9VA
17+
xsCW6EN6MpaflAr0iVHfvTxcfLw1WF7UbPGMJtwZWN3yZPbVJ1CNUirifsrpjE1j
18+
BSalQgAeNjDGgnP2bHmbOMPxNBKmgVOAI6PmkuZdS7wD69Jn2hpcUuVv8LZo5iOW
19+
i3q6fV/gyQKBgQC9l5A96R1mibPurENJowIDhMgNjCNGmh8lkRCqroUa+6JAiAzL
20+
0mHIOh707NRil9kpn26E4ZBXO7ifSdU8+E/t3dcEYmKCa+mSVxv6HOk2thhkncey
21+
ziOkXz5Zq+UhTYv16Q6LGy5Z7l6u6BA6aQDRzH3HojmiEhwHw6L00kuDoQKBgCob
22+
N+ltZvR0kwJox9xa2eoyTvoFA+sDD/mhcYC6DLEGLk9SUnvKP2U8Mvq9sbOuDUaK
23+
eHZa3JiZsO01zvCM1Ok8RMXbNGXIlPza9gljpJoyZ2M3vCqZ9Ten1Vg+dIxy2y0d
24+
toTPSHAoP4OShe1FH2tRKsBkix3jvmVPOL3rlijhAoGBANnkg5Y70AzFivsr1dpV
25+
cuWHZLbUE2Sra1j2mfJnbyqJC3kdN4C3CUFZ7mK6m8BouLID5PiBbBOixLA1qwVb
26+
rFHQvg7IEnjal2EUHYlrPDoPQRvcGMx7Sg9udISodq6R6ewJDrJrWXZAchX3qzjW
27+
xi+kKq2a3tCC+deJqrN0NWam
28+
-----END PRIVATE KEY-----

benchmark/with.js

+39
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
'use strict'
2+
const {readFileSync} = require("fs")
3+
4+
const fastify = require('fastify')(
5+
{
6+
https: {
7+
cert: readFileSync(__dirname + "/cert.pem"),
8+
key: readFileSync(__dirname + "/key.pem")
9+
},
10+
logger: false,
11+
serverFactory: require("..")()
12+
}
13+
)
14+
15+
const schema = {
16+
schema: {
17+
response: {
18+
200: {
19+
type: 'object',
20+
properties: {
21+
hello: {
22+
type: 'string'
23+
}
24+
}
25+
}
26+
}
27+
}
28+
}
29+
30+
fastify
31+
.get('/', schema, function (req, reply) {
32+
reply
33+
.send({ hello: 'world' })
34+
})
35+
36+
fastify.listen(3000, (err, address) => {
37+
if (err) throw err
38+
fastify.log.info(`server listening on ${address}`)
39+
})

benchmark/without.js

+38
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
'use strict'
2+
const {readFileSync} = require("fs")
3+
4+
const fastify = require('fastify')(
5+
{
6+
https: {
7+
cert: readFileSync(__dirname + "/cert.pem"),
8+
key: readFileSync(__dirname + "/key.pem")
9+
},
10+
logger: false
11+
}
12+
)
13+
14+
const schema = {
15+
schema: {
16+
response: {
17+
200: {
18+
type: 'object',
19+
properties: {
20+
hello: {
21+
type: 'string'
22+
}
23+
}
24+
}
25+
}
26+
}
27+
}
28+
29+
fastify
30+
.get('/', schema, function (req, reply) {
31+
reply
32+
.send({ hello: 'world' })
33+
})
34+
35+
fastify.listen(3000, (err, address) => {
36+
if (err) throw err
37+
fastify.log.info(`server listening on ${address}`)
38+
})

0 commit comments

Comments
 (0)