swm-core 4.1.1 / benchmark snapshot

Бенчмарки swm-core

HTTP и WebSocket: отдельные запуски, медиана пропускной способности и задержка p99.

Снимок результатов версионируется вместе с пакетом и связан с исходным CI run.

24.16.0
Node.js
Intel Xeon E5-2680 v4
процессор
Linux x64
система
62.63 GiB
память
25.07.2026
измерено

Карта производительности

Каждая точка связывает медианную пропускную способность с p99. Лучший баланс находится справа внизу.

  • Крупная точка — медиана
  • Малые точки — отдельные запуски

← остальные серверы

Карта производительностиКаждая точка связывает медианную пропускную способность с p99. Лучший баланс находится справа внизу.лучший баланс ↘swm-coreuWebSockets.js ref.HyperExpressmicroFastifyExpress

Сравнение HTTP и WebSocket

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

GET /base-async

Короткий JSON-ответ через async-обработчик.

GET
/base-async
100
connections
2 × 6s
Запуски

Пропускная способность

больше — лучше

  1. swm-core156 178 запр/с
  2. uWebSockets.js ref.151 796 запр/с
  3. HyperExpress69 217 запр/с
  4. micro36 536 запр/с
  5. Fastify37 130 запр/с
  6. Express23 445 запр/с

Задержка p99

меньше — лучше

  1. swm-core12,53 мс
  2. uWebSockets.js ref.12,93 мс
  3. HyperExpress28,25 мс
  4. micro39,23 мс
  5. Fastify35,1 мс
  6. Express58,17 мс
GET /base-async
СерверПропускная способность · медианаЗадержка p99 · медианазапуск 1запуск 2
swm-core156 178 запр/с12,53 мс158 793 · 12,29 мс153 563 · 12,78 мс
uWebSockets.js ref.151 796 запр/с12,93 мс158 311 · 12,29 мс145 281 · 13,57 мс
HyperExpress69 217 запр/с28,25 мс72 022 · 27,13 мс66 413 · 29,36 мс
micro36 536 запр/с39,23 мс39 174 · 33,07 мс33 897 · 45,4 мс
Fastify37 130 запр/с35,1 мс38 049 · 34,4 мс36 212 · 35,79 мс
Express23 445 запр/с58,17 мс23 262 · 56,44 мс23 627 · 59,9 мс

GET /headers

Скалярные заголовки ответа и повторяющиеся Set-Cookie.

GET
/headers
100
connections
2 × 6s
Запуски

Пропускная способность

больше — лучше

  1. swm-core138 867 запр/с
  2. uWebSockets.js ref.145 385 запр/с
  3. HyperExpress62 886 запр/с
  4. micro31 741 запр/с
  5. Fastify30 697 запр/с
  6. Express18 722 запр/с

Задержка p99

меньше — лучше

  1. swm-core13,98 мс
  2. uWebSockets.js ref.13,3 мс
  3. HyperExpress30,56 мс
  4. micro33,74 мс
  5. Fastify42,78 мс
  6. Express66,79 мс
GET /headers
СерверПропускная способность · медианаЗадержка p99 · медианазапуск 1запуск 2
swm-core138 867 запр/с13,98 мс142 365 · 13,57 мс135 369 · 14,4 мс
uWebSockets.js ref.145 385 запр/с13,3 мс143 473 · 13,57 мс147 298 · 13,04 мс
HyperExpress62 886 запр/с30,56 мс62 075 · 31,16 мс63 696 · 29,95 мс
micro31 741 запр/с33,74 мс31 543 · 34,4 мс31 938 · 33,07 мс
Fastify30 697 запр/с42,78 мс30 406 · 42,78 мс30 987 · 42,78 мс
Express18 722 запр/с66,79 мс18 739 · 66,13 мс18 706 · 67,46 мс

GET /headers-prepared

Предварительно проверенный переиспользуемый набор заголовков.

GET
/headers-prepared
100
connections
2 × 6s
Запуски

Пропускная способность

больше — лучше

  1. swm-core162 836 запр/с
  2. uWebSockets.js ref.164 283 запр/с
  3. HyperExpress61 378 запр/с
  4. micro32 408 запр/с
  5. Fastify32 669 запр/с
  6. Express18 545 запр/с

Задержка p99

меньше — лучше

  1. swm-core11,94 мс
  2. uWebSockets.js ref.11,93 мс
  3. HyperExpress31,79 мс
  4. micro41,69 мс
  5. Fastify41,63 мс
  6. Express68,16 мс
GET /headers-prepared
СерверПропускная способность · медианаЗадержка p99 · медианазапуск 1запуск 2
swm-core162 836 запр/с11,94 мс156 787 · 12,53 мс168 884 · 11,35 мс
uWebSockets.js ref.164 283 запр/с11,93 мс163 183 · 12,05 мс165 382 · 11,81 мс
HyperExpress61 378 запр/с31,79 мс59 692 · 32,42 мс63 063 · 31,16 мс
micro32 408 запр/с41,69 мс32 720 · 45,4 мс32 097 · 37,99 мс
Fastify32 669 запр/с41,63 мс32 253 · 44,51 мс33 085 · 38,75 мс
Express18 545 запр/с68,16 мс18 248 · 70,18 мс18 841 · 66,13 мс

POST /base

Приём и разбор небольшого JSON-тела.

POST
/base
100
connections
2 × 6s
Запуски

Пропускная способность

больше — лучше

  1. swm-core31 541 запр/с
  2. uWebSockets.js ref.30 399 запр/с
  3. HyperExpress22 454 запр/с
  4. micro13 128 запр/с
  5. Fastify11 255 запр/с
  6. Express8 713 запр/с

Задержка p99

меньше — лучше

  1. swm-core6,14 мс
  2. uWebSockets.js ref.6,39 мс
  3. HyperExpress8,60 мс
  4. micro14,39 мс
  5. Fastify23,16 мс
  6. Express19,3 мс
POST /base
СерверПропускная способность · медианаЗадержка p99 · медианазапуск 1запуск 2
swm-core31 541 запр/с6,14 мс30 917 · 6,266 мс32 165 · 6,023 мс
uWebSockets.js ref.30 399 запр/с6,39 мс29 950 · 6,519 мс30 848 · 6,266 мс
HyperExpress22 454 запр/с8,60 мс22 040 · 8,774 мс22 869 · 8,433 мс
micro13 128 запр/с14,39 мс13 199 · 14,4 мс13 058 · 14,4 мс
Fastify11 255 запр/с23,16 мс11 082 · 23,62 мс11 427 · 22,7 мс
Express8 713 запр/с19,3 мс8 935 · 21,39 мс8 491 · 17,2 мс

WebSocket / echo

Замкнутый цикл ping-pong с сообщением размером 64 байта.

50
connections
2 × 6s
Запуски

Пропускная способность

больше — лучше

  1. swm-core48 330 сообщ/с
  2. uWebSockets.js ref.47 542 сообщ/с
  3. ws47 519 сообщ/с

Задержка p99

меньше — лучше

  1. swm-core1,738 мс
  2. uWebSockets.js ref.1,72 мс
  3. ws1,977 мс
WebSocket / echo
СерверПропускная способность · медианаЗадержка p99 · медианазапуск 1запуск 2
swm-core48 330 сообщ/с1,738 мс48 109 · 1,846 мс48 551 · 1,63 мс
uWebSockets.js ref.47 542 сообщ/с1,72 мс47 268 · 1,744 мс47 815 · 1,696 мс
ws47 519 сообщ/с1,977 мс49 388 · 1,855 мс45 650 · 2,099 мс

Нативный биндинг измеряется отдельно

Тот же сервер swm-core запускается поверх @swarmmachina/swm-uws и эталонного uWebSockets.js. Четыре сбалансированных запуска защищают замену биндинга от регрессий.

performance gate пройден

Binding: HTTP

Одинаковый синхронный GET поверх двух нативных биндингов.

GET
/base-sync
100
connections
4 × 6s
Запуски

Пропускная способность

больше — лучше

  1. swm-uws204 241 запр/с
  2. uWebSockets.js ref.197 765 запр/с

Задержка p99

меньше — лучше

  1. swm-uws9,50 мс
  2. uWebSockets.js ref.9,78 мс
Binding: HTTP
СерверПропускная способность · медианаЗадержка p99 · медианазапуск 1запуск 2запуск 3запуск 4
swm-uws204 241 запр/с9,50 мс202 842 · 9,497 мс204 749 · 9,497 мс203 733 · 9,497 мс213 499 · 9,129 мс
uWebSockets.js ref.197 765 запр/с9,78 мс195 375 · 10,08 мс203 544 · 9,497 мс197 709 · 9,881 мс197 821 · 9,687 мс

Binding: WebSocket

Одинаковый WebSocket echo поверх двух нативных биндингов.

50
connections
4 × 6s
Запуски

Пропускная способность

больше — лучше

  1. swm-uws44 124 сообщ/с
  2. uWebSockets.js ref.43 880 сообщ/с

Задержка p99

меньше — лучше

  1. swm-uws1,783 мс
  2. uWebSockets.js ref.1,861 мс
Binding: WebSocket
СерверПропускная способность · медианаЗадержка p99 · медианазапуск 1запуск 2запуск 3запуск 4
swm-uws44 124 сообщ/с1,783 мс44 579 · 1,767 мс44 830 · 1,799 мс43 668 · 1,824 мс43 578 · 1,714 мс
uWebSockets.js ref.43 880 сообщ/с1,861 мс44 502 · 1,886 мс44 662 · 1,907 мс43 258 · 1,712 мс43 162 · 1,837 мс

Как читать результаты

  1. 01

    Короткая черта показывает медиану. Точки отмечают отдельные запуски, а линия между ними — разброс.

  2. 02

    Для пропускной способности больше — лучше. Для p99 меньше — лучше. Значения разных сценариев сравнивать нельзя.

  3. 03

    Сравнительный прогон фреймворков и регрессионный baseline — разные серии измерений. Здесь показан только совместный прогон.

Результаты сохранены в репозитории как версионированный снимок. Прогон воспроизводим: ссылка на исходный CI run и полный хеш коммита остаются частью страницы.

commit
8e5b2672
синхронизировано
2026-07-25