ASP.NET Web Api vs Node.js Benchmark
Much has been said about the Node.js’s great performance so I wanted to test out how it compares to an ASP.NET Web Api backend.I created a simple server for both of the platforms which accepts a POST-request and then responds back with the request’s body.
Update 24.6.2012: Updated tests with some tweaks.
The Node.js and ASP.NET Web Api implementations
Here’s the Node.js code:
var express = require('express') , app = express.createServer(); app.use(express.bodyParser()); app.post('/', function(req, res){ res.send(req.body); }); app.listen(3000);
And here’s the ASP.NET Web Api controller:
public class ValuesController : ApiController { // POST /api/values public Task<string> Post() { return this.ControllerContext.Request.Content.ReadAsStringAsync(); } }
Benchmark
I used Apache’s ab tool to test the performance of the platforms. The benchmark was run with the following settings:
- Total number of requests: 100 000
- Concurrency: 100
The benchmark (test.dat) contained a simple JSON, taken from Wikipedia.
{ "firstName": "John", "lastName" : "Smith", "age" : 25, "address" : { "streetAddress": "21 2nd Street", "city" : "New York", "state" : "NY", "postalCode" : "10021" }, "phoneNumber": [ { "type" : "home", "number": "212 555-1234" }, { "type" : "fax", "number": "646 555-4567" } ] }
Here’s the whole command which was used to run the performance test:
ab -n 100000 -c 100 -p .test.dat -T 'application/json; charset=utf-8' http://localhost/
The performance test was run 3 times and the best result for each platform was selected. The performance difference between the test runs was minimal.
Test Environment
The benchmark was run on a Windows Server 2008 R2, hosted on an c1.medium Amazon EC2 –instance:
Specs of the instance
- 1.7GB memory
- 5 EC2 Compute Units (2 virtual cores)
Versions
- Node.js: 0.6.17
- ASP.NET Web Api: The official beta release.
- IIS: 7
Both the Node and IIS –servers were run with their out-of-the-box settings.
Benchmark Results
Web Api | Node.js | |
Time taken (in s) | 89.95 | 41.65 |
Requests per second | 1111.69 | 2400.89 |
Time per request (in ms) | 89.95 | 41.65 |
Failed requests | 0 | 0 |
Conclusion
The out-of-the-box performance of the Node.js seems to be better than the performance of the ASP.NET Web Api + IIS7. Tweaking the IIS7’s settings could make the ASP.NET Web Api perform better but for this test the default settings of IIS7 were used.