Express
:3001Минималистичный фреймворк, де-факто стандарт Node.js. Встречается практически в любом продакшене, что делает его естественным базовым ориентиром.
Магистерская диссертация · ИТМО · Защита 2026
Воспроизводимый стенд нагрузочного тестирования для девяти серверных фреймворков на шести сценариях TechEmpower. Стенд собирает телеметрию, считает доверительные интервалы и хранит каждый прогон целиком, чтобы результаты можно было перепроверить.
Цель работы — исследовать производительность серверных веб-фреймворков и библиотек на основе Node.js. Стенд автоматически разворачивает изолированную инфраструктуру, прогоняет фазы прогрева, основных измерений и охлаждения, а затем сводит данные autocannon, Prometheus и Pyroscope в один прогон. К сырым результатам применяется фильтр выбросов Тьюки и считаются 95% доверительные интервалы. Дальше всё уезжает в интерактивный отчёт: графики RPS, латентность по перцентилям (p50/p90/p99), потребление памяти и задержка цикла событий.
Серверные веб-фреймворки и библиотеки на основе Node.js.
Производительность серверных веб-фреймворков и библиотек на основе Node.js.
Исследовать производительность серверных веб-фреймворков и библиотек на основе Node.js.
Провести анализ отечественных и зарубежных источников по теме исследования.
Провести обзор архитектурных особенностей серверных веб-фреймворков и библиотек на основе Node.js.
Определить критерии и метрики оценки производительности серверных веб-фреймворков.
Разработать методику и провести эксперимент по сравнительному анализу производительности выбранных фреймворков и библиотек.
Провести анализ и интерпретацию полученных результатов.
Разработать и обосновать рекомендации по выбору серверного веб-фреймворка на основе 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: классические лидеры, современные high-performance решения и альтернативные runtime-первичные библиотеки.
Минималистичный фреймворк, де-факто стандарт Node.js. Встречается практически в любом продакшене, что делает его естественным базовым ориентиром.
Преемник Express от той же команды, основан на async/await и middleware-композиции.
Фреймворк со схемной валидацией и сериализацией через JSON Schema; компилирует валидаторы на старте.
Корпоративный фреймворк с богатой конфигурацией и плагинной архитектурой. Местами тяжеловат на конфиг, зато всё расширяемо.
Сервис-ориентированный фреймворк с поддержкой реального времени, поверх Express или Koa.
Лёгкая библиотека родом из мира edge-runtime (Cloudflare Workers, Bun, Deno). На Node.js работает через адаптер, поэтому интересно посмотреть, чего стоит этот «edge-first» дизайн на классическом V8.
TypeScript-first библиотека родом из экосистемы Bun. На Node.js работает через адаптер; интересна тем, что вся конфигурация маршрутов выводится в типы, без отдельной декларации схем.
Минималистичная HTTP-библиотека от команды Nuxt; основа Nitro и h3-серверов.
«All-in-one» фреймворк со своими ORM, шаблонизатором и инструментами интеграции. Подход редкий для современного Node, поэтому добавлен ради разнообразия.
Шесть нагрузочных сценариев в стиле TechEmpower: от чистой обработки запросов до сложной работы с базой данных и шаблонизацией.
GET /plaintextВозврат строки «Hello, World!». Измеряет накладные расходы фреймворка и роутинга.
GET /jsonСериализация небольшого объекта в JSON. Оценивает скорость стандартной сериализации.
GET /dbОдин SELECT по ключу из PostgreSQL. Измеряет качество интеграции с драйвером БД.
GET /queries?queries=2020 параллельных SELECT-запросов на запрос. Проверяет работу пула соединений.
GET /updates?queries=55 SELECT и 5 UPDATE на запрос. Самый ресурсоёмкий сценарий с записью.
GET /fortunesSELECT всех записей и рендер HTML-шаблона. Сочетание БД, ORM и шаблонизатора.
Полученные результаты применимы строго в границах сделанных допущений и не могут быть прямо экстраполированы на другие конфигурации.
Каждый прогон сохраняется со всеми сырыми данными, агрегатами и графиками. Дашборд позволяет сравнивать запуски, фильтровать по сценариям и фреймворкам, строить time-series и box-plot латентности.
Магистрант · Группа P4207
Интересы: серверные платформы Node.js, observability и performance engineering. Параллельно с учёбой работаю backend-разработчиком, поэтому Express, Docker и Linux-стенды близки мне по работе, а Hono и Elysia попались в процессе подготовки этой работы.
Текущая магистерская диссертация развивает результаты предшествующих научно-исследовательских работ.
«Экспериментальное исследование производительности серверных фреймворков Node.js». Первичное знакомство с инструментарием и методикой нагрузочного тестирования. На этом этапе были собраны smoke-прогоны и отлажен пайплайн agregации.
«Обобщение критериев сравнительного анализа фреймворков Node.js». Систематизация подходов и методик, использованных в данной диссертации. К этому моменту стенд научился выдерживать длинные soak-прогоны без рассинхрона метрик.