FURI vs Express Routing ( Round 2 )

What is FURI?
It’s a high-performance Node.js router for developing real-time HTTP API Servers.
This is an update from the initial benchmark comparison, at that time FURI was a concept project for me to ramp-up coding in TypeScript and working on my first NPM module. FURI works equally well with TypeScript and Javascript code, took some time to figure out how to build a TypeScript NPM module and be able to use it from Javascript code, I didn’t want FURI to be limited to only TypeScript coders.
Happy to announce the FURI project has entered Alpha mode, it now supports named parameters as well as request handler chaining. I lost the original benchmark apps, so I wrote a new one to 1) compare static route and 2) named parameter route along with param parsing (the param values are returned to the client in a message).
Here is the new benchmarks results.
FURI Web-App compared with Express Web-App
100000 requests using 100 concurrent clients.
Test 1: Static Routes
FURI is 2.217 time faster comparing total time.
FURI: 11.815 seconds
Express: 26.203 seconds
On a Per request basis in mill-seconds
Furi Time per request : 11.815 [ms] (mean)
Express Time per request : 26.203 [ms] (mean)
Test 2: Named Route Parameters
FURI is 2.077 time faster comparing total time.
FURI: 12.974 seconds
Express: 26.952 seconds)
On a Per request basis in mill-seconds
Furi Time per request : 12.974 [ms] (mean)
Express Time per request : 26.952 [ms] (mean)
Below are the details benchmark reports.
FURI Web-App Benchmark 1 Static Route
Server Software:
Server Hostname: localhost
Server Port: 3000
Document Path: /benchmark
Document Length: 56 bytes
Concurrency Level: 100
Time taken for tests: 11.815 seconds
Complete requests: 100000
Failed requests: 0
Total transferred: 13100000 bytes
HTML transferred: 5600000 bytes
Requests per second: 8463.87 [#/sec] (mean)
Time per request: 11.815 [ms] (mean)
Time per request: 0.118 [ms] (mean, across all concurrent requests)
Transfer rate: 1082.78 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.1 0 3
Processing: 4 12 4.5 10 54
Waiting: 4 12 4.4 10 54
Total: 6 12 4.5 10 55
Percentage of the requests served within a certain time (ms)
50% 10
66% 10
75% 11
80% 12
90% 13
95% 25
98% 28
99% 30
100% 55 (longest request)
Express Web-App Benchmark 1 Static Route
Server Software:
Server Hostname: localhost
Server Port: 3000
Document Path: /benchmark
Document Length: 56 bytes
Concurrency Level: 100
Time taken for tests: 26.203 seconds
Complete requests: 100000
Failed requests: 0
Total transferred: 25100000 bytes
HTML transferred: 5600000 bytes
Requests per second: 3816.31 [#/sec] (mean)
Time per request: 26.203 [ms] (mean)
Time per request: 0.262 [ms] (mean, across all concurrent requests)
Transfer rate: 935.44 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.1 0 3
Processing: 9 26 4.6 24 66
Waiting: 9 26 4.6 24 66
Total: 12 26 4.6 24 66
Percentage of the requests served within a certain time (ms)
50% 24
66% 24
75% 26
80% 29
90% 33
95% 36
98% 40
99% 44
100% 66 (longest request)
FURI Web-App Benchmark 2 Named Route Parameters
Server Software:
Server Hostname: localhost
Server Port: 3000
Document Path: /benchmark2/profile/bench/post/post1242
Document Length: 50 bytes
Concurrency Level: 100
Time taken for tests: 12.974 seconds
Complete requests: 100000
Failed requests: 0
Total transferred: 12500000 bytes
HTML transferred: 5000000 bytes
Requests per second: 7707.76 [#/sec] (mean)
Time per request: 12.974 [ms] (mean)
Time per request: 0.130 [ms] (mean, across all concurrent requests)
Transfer rate: 940.89 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.1 0 3
Processing: 11 13 4.1 11 57
Waiting: 11 13 4.1 11 57
Total: 11 13 4.1 11 58
Percentage of the requests served within a certain time (ms)
50% 11
66% 12
75% 12
80% 13
90% 14
95% 25
98% 27
99% 29
100% 58 (longest request)
Express Web-App Benchmark 2 Named Route Parameters
Server Software:
Server Hostname: localhost
Server Port: 3000
Document Path: /benchmark2/profile/bench/post/post1242
Document Length: 50 bytes
Concurrency Level: 100
Time taken for tests: 26.952 seconds
Complete requests: 100000
Failed requests: 0
Total transferred: 24500000 bytes
HTML transferred: 5000000 bytes
Requests per second: 3710.26 [#/sec] (mean)
Time per request: 26.952 [ms] (mean)
Time per request: 0.270 [ms] (mean, across all concurrent requests)
Transfer rate: 887.71 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.1 0 3
Processing: 24 27 4.7 25 83
Waiting: 22 27 4.7 25 83
Total: 24 27 4.7 25 84
Percentage of the requests served within a certain time (ms)
50% 25
66% 25
75% 27
80% 30
90% 34
95% 37
98% 41
99% 45
100% 84 (longest request)