FURI vs Express Routing ( Round 2 )

Google Image

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)