Много было сказано о превосходной производительности Node.js, поэтому я хотел проверить, как она сравнивается с серверной частью ASP.NET Web Api. Я создал простой сервер для обеих платформ, который принимает POST-запрос, а затем отвечает телом запроса.
Реализации Node.js и ASP.NET Web Api
Вот код Node.js:
var express = require('express')
, app = express.createServer();
app.use(express.bodyParser());
app.post('/', function(req, res){
res.send(req.body);
});
app.listen(3000);
А вот контроллер ASP.NET Web Api:
public class ValuesController : ApiController
{
// POST /api/values
public Task<string> Post()
{
return this.ControllerContext.Request.Content.ReadAsStringAsync();
}
}
эталонный тест
Я использовал инструмент Apache ab для тестирования производительности платформ. Тест был выполнен со следующими настройками:
- Общее количество запросов: 100 000
- Параллелизм: 100
Тест (test.dat) содержал простой JSON, взятый из Википедии.
{
"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"
}
]
}
Вот вся команда, которая использовалась для запуска теста производительности:
ab -n 100000 -c 100 -p .\test.dat -T 'application/json; charset=utf-8' http://localhost/
Тест производительности был выполнен 3 раза, и был выбран лучший результат для каждой платформы. Разница в производительности между тестами была минимальной.
Тестовая среда
Тест был выполнен на Windows Server 2008 R2, размещенном на c1.medium Amazon EC2, например:
Характеристики экземпляра
- 1,7 ГБ памяти
- 5 вычислительных блоков EC2 (2 виртуальных ядра)
Версии
- Node.js: 0.6.17
- ASP.NET Web Api: текущий выпуск (12.5.2012)
- IIS: 7
И Node, и IIS-серверы были запущены с готовыми настройками.
Результаты тестов
| Веб-интерфейс | Node.js | |
| Время взято (в с) | 89,95 | 41,65 |
| Запросов в секунду | 1111,69 | 2400,89 |
| Время на запрос (в мс) | 89,95 | 41,65 |
| Неудачные запросы | 0 | 0 |
Вывод
Производительность Node.js из коробки выше, чем у ASP.NET Web Api + IIS7. Изменение настроек IIS7 может повысить производительность ASP.NET Web Api, но для этого теста использовались настройки IIS7 по умолчанию.