В последние годы Javascript стремительно вырос. Основная причина в том, что каждый браузер поддерживает javascript, поэтому javascript фактически является клиентским языком браузеров. Если вы хотите создать веб-сайт и обеспечить отличный UX, тогда javascript - ваш лучший выбор. Быстрое распространение Javascript также связано с его сильным сообществом. Согласно опросу stackoverflow, javascript является самой популярной технологией в 2017 году, а по запросу на вытягивание GitHub javascript занимает огромное место на GitHub, с более чем вдвое большим количеством запросов на вытягивание, чем второй лидирующий язык.

Сегодняшний Javascript используется не только во внешнем интерфейсе, но также в серверной части и на мобильных устройствах. В интерфейсе Javascript есть React, Vue и Angular. Мы видим, что реагируют на нативный, ионный и собственный скрипты на мобильных устройствах. В бэкэнде есть экспресс, коа, метеор и многое другое. Из-за большого сообщества javascript также имеет множество фреймворков, облегчающих вашу работу. Каждый фреймворк утверждает, что он лучший. Мы все это знаем, но проблема в том, как решить, какой из них нам подходит?

Эта статья изначально написана на основе реального проекта на нашем рабочем месте Скиши. Skyshi - компания, занимающаяся разработкой программного обеспечения, которая сосредоточилась на том, чтобы помочь стартапу расти, увеличивая масштаб своей системы и предоставляя дополнительную команду для вашего стартапа. Skyshi использует очень много фреймворков на разных языках программирования. В последнее время Skyshi решает выбрать javascript в качестве основного языка программирования. В интерфейсе мы используем reactjs, на мобильном телефоне мы используем react native, а в backend мы используем некую структуру NodeJS. Ага, мы собираемся сосредоточиться на backend-технологиях.

Как я уже сказал ранее, выбрать правильный фреймворк сложно, поэтому правильное решение - это их сравнительный анализ. Давайте сравним эти платформы, перечисленные ниже:

А также мы сравниваем указанные выше фреймворки с собственным сервером NodeJS.

Эти фреймворки сейчас популярны, но держу пари, что вам может быть интересно, что такое фреймворк Merapi? Merapi был создан Kata.ai. Kata.ai - индонезийская компания, занимающаяся разговорным искусственным интеллектом, специализирующаяся на улучшении понимания человеческих разговоров, улучшении способов взаимодействия людей с машинами. Фреймворк Merapi - это подключаемый контейнер для внедрения зависимостей для Node.js. Merapi - это компонентная структура с языком машинописного текста, построенная на вершине платформы Express.

Результат тестирования покажет, какой фреймворк имеет наибольшее количество запросов в секунду (rps). Все мы знаем, что все эти фреймворки достаточно быстрые, чтобы обрабатывать любое приложение. Наша цель - показать, как провести честное сравнение между фреймворками. Для честного сравнения настройте каждый фреймворк с одним и тем же результатом вывода, а также удалите все зависимости, такие как средство ведения журнала, промежуточное ПО и отладка, чтобы мы могли сравнить сравнение с яблоком и яблоком.

Давай начнем

Во-первых, установите в VULTR новый сервер по самой низкой цене, который имеет 512 Мб оперативной памяти и 1 ядро ​​CPU. Установите последнюю версию NodeJS и NPM на свой сервер.

Затем установите библиотеку для тестирования производительности. Мы используем библиотеку автопушка. Autocannon - это инструмент тестирования производительности HTTP / 1.1, написанный на node, с поддержкой конвейерной обработки HTTP и HTTPS.

$ npm i autocannon -g

После настройки клонируйте этот репозиторий на свой сервер или ноутбук / ПК. Запустите npm run install, чтобы установить весь фреймворк, который мы собираемся протестировать. После успешной установки всех зависимостей приступим к их тестированию.

Результаты, достижения

Запустите простой тест с использованием эталонного теста autocannon с тестом двух типов, обычным и с конвейерным тестированием.
Сначала настройте autocannon для простого теста с конфигурацией 1024 соединения и таймаутом 30 секунд в течение 10 секунд, см. Команду ниже:

autocannon -c 1024 -t30 http://yourhost:port

Если вы используете мое репо, просто введите npm run plain и проверьте результат в файле results-plain.txt. Вот результаты:

Исключить простой сервер, только Koa и Molecular, у которых истекло 5000 оборотов в секунду. Koa успешно победил Molecular и превзошел другие фреймворки. Express, Merapi и Feather прошли в среднем 3000 оборотов в секунду, а последние, Loopback 2, Loopback 3 и Nest достигли среднего значения только 2000 оборотов в секунду.

Второй тест. Настройте автопушку для тестирования конвейера с конфигурацией 1024 соединения, 10 конвейеров и таймаутом 30 секунд на 10 секунд, см. Команду ниже:

autocannon -c 1024 -t30 -p 10 http://yourhost:port

Если вы используете мое репо, просто введите npm run pipeline и проверьте результат в файле results-pipeline.txt. Вот результаты:

Все рамки увеличились. Express, Nest и Feather значительно выросли, в то время как Merapi, Molecular, Koa и Loopback имеют тенденцию к стабильности.

Обновление

В реальном мире сервер с 512 МБ ОЗУ и 1-ядерным процессором слишком слаб для запуска сервера NodeJS. Поэтому я решил обновить сервер с 4 ГБ ОЗУ и двухъядерным процессором. Перейдите в личный кабинет VULTR и измените свой план. Обновление может занять несколько минут.

А теперь сделайте тест еще раз. Вот результаты:

После обновления сервера производительность всех фреймворков значительно увеличилась. Даже Koa и Molecular обрабатывают более 10000 запросов в секунду.

Но подождите, после запуска с конвейером, с Molecular все в порядке. Увеличились все рамки, кроме Молекулярной. Коа по-прежнему лучший, но у Пера есть огромное улучшение, увеличенное более чем в два раза по сравнению с предыдущим.

Заключение

Коа выиграл тест. Молекулярный - второй, но имеет тенденцию к снижению после тестирования с конвейером. Feather и Express имеют примерно одинаковое количество оборотов в секунду, но Feather производит больше оборотов в секунду при использовании конвейера. И Koa, и Merapi, и Express были созданы на основе Express, но Koa произвел больше оборотов в секунду, меньший размер и большую надежность. Итак, на основании результатов тестирования вы решили использовать Koa для своего следующего проекта. Но если у вас есть другая причина, например поддержка сообщества или более высокая звезда в GitHub, вы можете выбрать другие.