Много было сказано о превосходной производительности 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 по умолчанию.