swm-core 5.1.0 / benchmark snapshot

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

HTTP и WebSocket: отдельные запуски, throughput, p95/p99, ELU и RSS.

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

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

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

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

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

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

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

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

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

GET /base-async

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

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

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

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

  1. swm-core194 957 запр/с
  2. uWebSockets.js ref.187 866 запр/с
  3. HyperExpress66 594 запр/с
  4. micro35 855 запр/с
  5. Fastify36 734 запр/с
  6. Express22 461 запр/с

Задержка p99

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

  1. swm-core9,984 мс
  2. uWebSockets.js ref.10,29 мс
  3. HyperExpress29,11 мс
  4. micro41,19 мс
  5. Fastify35,82 мс
  6. Express54,3 мс
GET /base-async
СерверПропускная способность · медианаЗадержка p95 · медианаЗадержка p99 · медианаELU · медианаRSS · медианазапуск 1запуск 2
swm-core194 957 запр/с5,244 мс9,984 мс98,74%80,65 MiB190 187 · 5,348 / 10,28 мс199 726 · 5,14 / 9,687 мс
uWebSockets.js ref.187 866 запр/с5,582 мс10,29 мс98,77%81,67 MiB196 533 · 5,14 / 9,881 мс179 199 · 6,023 / 10,7 мс
HyperExpress66 594 запр/с15,29 мс29,11 мс98,88%91,34 MiB69 851 · 14,68 / 27,67 мс63 336 · 15,89 / 30,55 мс
micro35 855 запр/с29,73 мс41,19 мс98,98%123,33 MiB35 387 · 31,78 / 38,75 мс36 322 · 27,67 / 43,63 мс
Fastify36 734 запр/с27,68 мс35,82 мс99,06%123,93 MiB37 594 · 27,13 / 34,4 мс35 874 · 28,22 / 37,24 мс
Express22 461 запр/с47,7 мс54,3 мс99,07%125,03 MiB22 193 · 48,17 / 52,15 мс22 728 · 47,23 / 56,44 мс

GET /headers

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

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

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

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

  1. swm-core132 414 запр/с
  2. uWebSockets.js ref.147 641 запр/с
  3. HyperExpress60 812 запр/с
  4. micro32 381 запр/с
  5. Fastify32 955 запр/с
  6. Express18 635 запр/с

Задержка p99

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

  1. swm-core14,4 мс
  2. uWebSockets.js ref.13,04 мс
  3. HyperExpress32,1 мс
  4. micro38,68 мс
  5. Fastify41,58 мс
  6. Express68,86 мс
GET /headers
СерверПропускная способность · медианаЗадержка p95 · медианаЗадержка p99 · медианаELU · медианаRSS · медианазапуск 1запуск 2
swm-core132 414 запр/с8,40 мс14,4 мс98,81%81,23 MiB135 359 · 7,489 / 14,4 мс129 468 · 9,311 / 14,4 мс
uWebSockets.js ref.147 641 запр/с7,063 мс13,04 мс98,79%81,76 MiB146 979 · 7,342 / 13,04 мс148 303 · 6,783 / 13,04 мс
HyperExpress60 812 запр/с17,22 мс32,1 мс98,88%91,5 MiB61 622 · 16,54 / 31,78 мс60 002 · 17,9 / 32,42 мс
micro32 381 запр/с32,45 мс38,68 мс99,03%140,72 MiB32 267 · 31,16 / 33,73 мс32 495 · 33,73 / 43,63 мс
Fastify32 955 запр/с32,45 мс41,58 мс99,13%124,17 MiB32 674 · 33,73 / 43,63 мс33 236 · 31,16 / 39,52 мс
Express18 635 запр/с59,34 мс68,86 мс99,07%123,93 MiB18 897 · 57,57 / 66,13 мс18 372 · 61,1 / 71,58 мс

GET /headers-prepared

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

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

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

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

  1. swm-core167 566 запр/с
  2. uWebSockets.js ref.189 834 запр/с
  3. HyperExpress59 461 запр/с
  4. micro31 983 запр/с
  5. Fastify32 849 запр/с
  6. Express19 590 запр/с

Задержка p99

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

  1. swm-core11,71 мс
  2. uWebSockets.js ref.10,18 мс
  3. HyperExpress32,74 мс
  4. micro33,41 мс
  5. Fastify43,26 мс
  6. Express66,82 мс
GET /headers-prepared
СерверПропускная способность · медианаЗадержка p95 · медианаЗадержка p99 · медианаELU · медианаRSS · медианазапуск 1запуск 2
swm-core167 566 запр/с6,09 мс11,71 мс98,78%80,73 MiB159 478 · 6,391 / 12,29 мс175 653 · 5,789 / 11,13 мс
uWebSockets.js ref.189 834 запр/с5,456 мс10,18 мс98,77%81,28 MiB189 953 · 5,348 / 10,28 мс189 715 · 5,564 / 10,08 мс
HyperExpress59 461 запр/с17,38 мс32,74 мс98,89%93,57 MiB59 351 · 16,87 / 33,07 мс59 570 · 17,9 / 32,42 мс
micro31 983 запр/с32,14 мс33,41 мс99,06%125,33 MiB33 588 · 30,55 / 32,42 мс30 378 · 33,73 / 34,4 мс
Fastify32 849 запр/с32,45 мс43,26 мс98,94%122,89 MiB32 900 · 31,16 / 41,12 мс32 797 · 33,73 / 45,4 мс
Express19 590 запр/с54,26 мс66,82 мс99,07%122,92 MiB19 512 · 55,34 / 68,81 мс19 667 · 53,19 / 64,84 мс

POST /base

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

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

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

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

  1. swm-core34 498 запр/с
  2. uWebSockets.js ref.32 704 запр/с
  3. HyperExpress22 147 запр/с
  4. micro13 349 запр/с
  5. Fastify12 030 запр/с
  6. Express9 154 запр/с

Задержка p99

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

  1. swm-core5,565 мс
  2. uWebSockets.js ref.5,964 мс
  3. HyperExpress8,776 мс
  4. micro14,26 мс
  5. Fastify22,93 мс
  6. Express21,18 мс
POST /base
СерверПропускная способность · медианаЗадержка p95 · медианаЗадержка p99 · медианаELU · медианаRSS · медианазапуск 1запуск 2
swm-core34 498 запр/с3,103 мс5,565 мс98,76%81,38 MiB34 982 · 3,133 / 5,455 мс34 014 · 3,072 / 5,675 мс
uWebSockets.js ref.32 704 запр/с3,197 мс5,964 мс98,73%82,88 MiB33 158 · 3,133 / 5,905 мс32 249 · 3,26 / 6,023 мс
HyperExpress22 147 запр/с4,657 мс8,776 мс98,73%141,81 MiB22 586 · 4,565 / 8,602 мс21 707 · 4,749 / 8,95 мс
micro13 349 запр/с8,27 мс14,26 мс98,88%116,59 MiB12 939 · 8,433 / 14,68 мс13 759 · 8,106 / 13,84 мс
Fastify12 030 запр/с9,689 мс22,93 мс98,9%260,81 MiB11 880 · 9,881 / 22,7 мс12 180 · 9,497 / 23,15 мс
Express9 154 запр/с11,7 мс21,18 мс98,93%106,99 MiB9 053 · 12,05 / 21,39 мс9 255 · 11,35 / 20,97 мс

WebSocket / echo

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

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

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

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

  1. swm-core101 414 сообщ/с
  2. uWebSockets.js ref.107 613 сообщ/с
  3. HyperExpress104 011 сообщ/с
  4. ws42 505 сообщ/с

Задержка p99

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

  1. swm-core0,927 мс
  2. uWebSockets.js ref.0,865 мс
  3. HyperExpress0,909 мс
  4. ws2,238 мс
WebSocket / echo
СерверПропускная способность · медианаЗадержка p95 · медианаЗадержка p99 · медианаELU · медианаRSS · медианазапуск 1запуск 2
swm-core101 414 сообщ/с0,891 мс0,927 мс98,06%67,3 MiB102 070 · 0,882 / 0,918 мс100 757 · 0,90 / 0,936 мс
uWebSockets.js ref.107 613 сообщ/с0,815 мс0,865 мс98,01%67,69 MiB107 068 · 0,815 / 0,865 мс108 158 · 0,815 / 0,865 мс
HyperExpress104 011 сообщ/с0,857 мс0,909 мс98,14%69,43 MiB105 131 · 0,848 / 0,90 мс102 891 · 0,865 / 0,918 мс
ws42 505 сообщ/с2,047 мс2,238 мс98,22%74,46 MiB41 934 · 2,067 / 2,282 мс43 075 · 2,027 / 2,194 мс

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

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

performance gate пройден

Binding: HTTP

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

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

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

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

  1. swm-uws219 044 запр/с
  2. uWebSockets.js ref.211 768 запр/с

Задержка p99

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

  1. swm-uws8,862 мс
  2. uWebSockets.js ref.8,95 мс
Binding: HTTP
СерверПропускная способность · медианаЗадержка p95 · медианаЗадержка p99 · медианаELU · медианаRSS · медианазапуск 1запуск 2запуск 3запуск 4
swm-uws219 044 запр/с4,656 мс8,862 мс98,72%80,42 MiB220 784 · 4,656 / 8,774 мс210 582 · 4,844 / 9,311 мс221 469 · 4,656 / 8,774 мс217 304 · 4,656 / 8,95 мс
uWebSockets.js ref.211 768 запр/с4,848 мс8,95 мс98,73%81,53 MiB217 243 · 4,656 / 8,95 мс226 947 · 4,475 / 8,602 мс206 293 · 5,789 / 8,95 мс203 693 · 5,04 / 9,497 мс

Binding: WebSocket

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

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

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

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

  1. swm-uws104 033 сообщ/с
  2. uWebSockets.js ref.102 967 сообщ/с

Задержка p99

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

  1. swm-uws0,90 мс
  2. uWebSockets.js ref.0,918 мс
Binding: WebSocket
СерверПропускная способность · медианаЗадержка p95 · медианаЗадержка p99 · медианаELU · медианаRSS · медианазапуск 1запуск 2запуск 3запуск 4
swm-uws104 033 сообщ/с0,857 мс0,90 мс97,98%67,17 MiB105 114 · 0,848 / 0,90 мс103 236 · 0,865 / 0,90 мс104 829 · 0,848 / 0,90 мс101 570 · 0,865 / 0,918 мс
uWebSockets.js ref.102 967 сообщ/с0,865 мс0,918 мс98,09%67,86 MiB102 945 · 0,865 / 0,918 мс101 748 · 0,882 / 0,936 мс102 988 · 0,865 / 0,90 мс103 628 · 0,848 / 0,918 мс

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

  1. 01

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

  2. 02

    Для throughput больше лучше; для p95, p99 и RSS меньше лучше. ELU показывает занятость event loop, а не самостоятельный рейтинг.

  3. 03

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

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

commit
4ee4fa3e
синхронизировано
2026-08-15