Магистерская диссертация · ИТМО · Защита 2026

Производительность Node.js фреймворков

Воспроизводимый стенд нагрузочного тестирования для девяти серверных фреймворков на шести сценариях TechEmpower. Стенд собирает телеметрию, считает доверительные интервалы и хранит каждый прогон целиком, чтобы результаты можно было перепроверить.

Сценарий Plaintext
Ожидание полного прогона
6 сценариев Ожидание полного прогона
0
фреймворков
0
сценариев
0+
автоматических тестов
0
итераций в полном прогоне

О работе

Цель работы — исследовать производительность серверных веб-фреймворков и библиотек на основе Node.js. Стенд автоматически разворачивает изолированную инфраструктуру, прогоняет фазы прогрева, основных измерений и охлаждения, а затем сводит данные autocannon, Prometheus и Pyroscope в один прогон. К сырым результатам применяется фильтр выбросов Тьюки и считаются 95% доверительные интервалы. Дальше всё уезжает в интерактивный отчёт: графики RPS, латентность по перцентилям (p50/p90/p99), потребление памяти и задержка цикла событий.

Объект, предмет, цель и задачи исследования

Объект исследования

Серверные веб-фреймворки и библиотеки на основе Node.js.

Предмет исследования

Производительность серверных веб-фреймворков и библиотек на основе Node.js.

Цель

Исследовать производительность серверных веб-фреймворков и библиотек на основе Node.js.

Задачи

  1. 1

    Провести анализ отечественных и зарубежных источников по теме исследования.

  2. 2

    Провести обзор архитектурных особенностей серверных веб-фреймворков и библиотек на основе Node.js.

  3. 3

    Определить критерии и метрики оценки производительности серверных веб-фреймворков.

  4. 4

    Разработать методику и провести эксперимент по сравнительному анализу производительности выбранных фреймворков и библиотек.

  5. 5

    Провести анализ и интерпретацию полученных результатов.

  6. 6

    Разработать и обосновать рекомендации по выбору серверного веб-фреймворка на основе Node.js с учётом требований к производительности.

Методология

🧪

Разработка через тестирование

Каждый компонент стенда покрыт юнит-тестами на vitest и end-to-end тестами на Playwright. Сборка и линт-проверка интегрированы в CI на GitHub Actions.

Нагрузочное тестирование

Основной инструмент — autocannon с кросс-валидацией результатов через wrk. Для каждого сценария выполняется фаза прогрева, серия независимых итераций и охлаждение между прогонами.

📊

Полная наблюдаемость

Метрики собираются Prometheus, визуализируются в Grafana, профили CPU и памяти снимает Pyroscope, distributed tracing идёт через OpenTelemetry. Все артефакты хранятся вместе с прогоном, без отдельной БД метрик.

📐

Статистический анализ

К сырым результатам применяется фильтр выбросов Тьюки (1.5 IQR), вычисляются среднее, медиана, стандартное отклонение и 95% доверительные интервалы. Скрипты на Python публикуют итоговые таблицы и графики.

Научная новизна и практическая значимость

Научная новизна

  • Состоит в обосновании структуры сравнительного исследования производительности серверных веб-фреймворков и библиотек на основе Node.js с учётом современных версий и условий эксплуатации.

Практическая значимость

  • Представляет собой разработанные и обоснованные рекомендации, которые могут помочь разработчикам в процессе принятия решения о выборе серверного веб-фреймворка на основе Node.js.

Фреймворки

Девять представителей экосистемы Node.js: классические лидеры, современные high-performance решения и альтернативные runtime-первичные библиотеки.

Express

:3001

Минималистичный фреймворк, де-факто стандарт Node.js. Встречается практически в любом продакшене, что делает его естественным базовым ориентиром.

Koa

:3002

Преемник Express от той же команды, основан на async/await и middleware-композиции.

Fastify

:3003

Фреймворк со схемной валидацией и сериализацией через JSON Schema; компилирует валидаторы на старте.

Hapi

:3004

Корпоративный фреймворк с богатой конфигурацией и плагинной архитектурой. Местами тяжеловат на конфиг, зато всё расширяемо.

Feathers

:3005

Сервис-ориентированный фреймворк с поддержкой реального времени, поверх Express или Koa.

Hono

:3006

Лёгкая библиотека родом из мира edge-runtime (Cloudflare Workers, Bun, Deno). На Node.js работает через адаптер, поэтому интересно посмотреть, чего стоит этот «edge-first» дизайн на классическом V8.

Elysia

:3007

TypeScript-first библиотека родом из экосистемы Bun. На Node.js работает через адаптер; интересна тем, что вся конфигурация маршрутов выводится в типы, без отдельной декларации схем.

H3

:3008

Минималистичная HTTP-библиотека от команды Nuxt; основа Nitro и h3-серверов.

Total.js

:3009

«All-in-one» фреймворк со своими ORM, шаблонизатором и инструментами интеграции. Подход редкий для современного Node, поэтому добавлен ради разнообразия.

Сценарии

Шесть нагрузочных сценариев в стиле TechEmpower: от чистой обработки запросов до сложной работы с базой данных и шаблонизацией.

01 GET /plaintext

Plaintext

Возврат строки «Hello, World!». Измеряет накладные расходы фреймворка и роутинга.

02 GET /json

JSON Serialization

Сериализация небольшого объекта в JSON. Оценивает скорость стандартной сериализации.

03 GET /db

Single Query

Один SELECT по ключу из PostgreSQL. Измеряет качество интеграции с драйвером БД.

04 GET /queries?queries=20

Multiple Queries

20 параллельных SELECT-запросов на запрос. Проверяет работу пула соединений.

05 GET /updates?queries=5

Database Updates

5 SELECT и 5 UPDATE на запрос. Самый ресурсоёмкий сценарий с записью.

06 GET /fortunes

Fortunes (Templating)

SELECT всех записей и рендер HTML-шаблона. Сочетание БД, ORM и шаблонизатора.

Ограничения исследования

Полученные результаты применимы строго в границах сделанных допущений и не могут быть прямо экстраполированы на другие конфигурации.

scope
  • Измерения проведены на ОС Linux (Ubuntu/Debian) с Node.js 24.x; на других ОС или версиях Node.js результаты могут отличаться.
  • В качестве СУБД использован PostgreSQL 16. Иной тип хранилища (MySQL, MongoDB, Redis) даст другую картину узких мест.
  • Поддерживаются HTTP/1.1 без TLS. HTTP/2, HTTP/3, WebSocket и gRPC в область исследования не входят.
  • Сценарии не моделируют реалистичную production-нагрузку (нет аутентификации, валидации JWT, rate limiting, бизнес-логики).
  • Конкретные числовые результаты привязаны к используемой VPS-конфигурации (CPU, память, диск); для иной аппаратуры стенд нужно запускать заново.

Результаты

Каждый прогон сохраняется со всеми сырыми данными, агрегатами и графиками. Дашборд позволяет сравнивать запуски, фильтровать по сценариям и фреймворкам, строить time-series и box-plot латентности.

Топ RPS (plaintext)
Ожидание полного прогона
Лучший p99 (plaintext)
Ожидание полного прогона
Прогонов в архиве
/results
  • Лидеры по сценарию plaintext определяются после полного прогона (10 итераций по 60 секунд).
  • Хвост распределения латентности (p99) часто оказывается информативнее среднего RPS.
  • На сценариях с PostgreSQL (db / queries / updates / fortunes) разрыв между фреймворками сокращается: узким местом становится база данных.

Стек технологий

Backend

Node.js 24TypeScript 5pnpm 10PostgreSQL 16

Фреймворки

ExpressKoaFastifyHapiFeathersHonoElysiaH3Total.js

Наблюдаемость

PrometheusGrafanaPyroscopeOpenTelemetry

Frontend

SvelteKit 2Svelte 5Tailwind CSS 4ECharts

Тестирование

vitestPlaywrightautocannonwrk

Инфраструктура

Dockerdocker-composeGitHub Actions

Автор

Зиганшин Станислав Эдуардович

Магистрант · Группа P4207

Интересы: серверные платформы Node.js, observability и performance engineering. Параллельно с учёбой работаю backend-разработчиком, поэтому Express, Docker и Linux-стенды близки мне по работе, а Hono и Elysia попались в процессе подготовки этой работы.

Университет ИТМО
Факультет программной инженерии и компьютерной техники
Научный руководитель, доцент: Государев И. Б.

Предшествующие работы

Текущая магистерская диссертация развивает результаты предшествующих научно-исследовательских работ.

НИР №2

Июнь 2025

«Экспериментальное исследование производительности серверных фреймворков Node.js». Первичное знакомство с инструментарием и методикой нагрузочного тестирования. На этом этапе были собраны smoke-прогоны и отлажен пайплайн agregации.

НИР №3

Январь 2026

«Обобщение критериев сравнительного анализа фреймворков Node.js». Систематизация подходов и методик, использованных в данной диссертации. К этому моменту стенд научился выдерживать длинные soak-прогоны без рассинхрона метрик.

Спасибо моему научному руководителю Государеву И. Б. за терпение, обстоятельные ревью методологии и постоянные «а почему именно так?» в нужный момент. Благодарю кафедру программной инженерии Университета ИТМО, а также коллег и одногруппников, помогавших обкатывать ранние версии стенда. Отдельно — родителям, которые всё это время поддерживали меня и верили, что из этой затеи действительно что-то получится.

© 2026 · Исследование производительности серверных веб-фреймворков и библиотек на основе Node.js

Исходный код на GitHub