Карта производительности
Каждая точка связывает медианную пропускную способность с p99. Лучший баланс находится справа внизу.
- Крупная точка — медиана
- Малые точки — отдельные запуски
← остальные серверы
swm-core 4.1.1 / benchmark snapshot
HTTP и WebSocket: отдельные запуски, медиана пропускной способности и задержка p99.
Снимок результатов версионируется вместе с пакетом и связан с исходным CI run.
Каждая точка связывает медианную пропускную способность с p99. Лучший баланс находится справа внизу.
← остальные серверы
Короткий JSON-ответ без асинхронной границы.
больше — лучше
меньше — лучше
| Сервер | Пропускная способность · медиана | Задержка p99 · медиана | запуск 1 | запуск 2 |
|---|---|---|---|---|
| swm-core | 211 327 запр/с | 9,04 мс | 212 661 · 8,95 мс | 209 993 · 9,129 мс |
| uWebSockets.js ref. | 197 326 запр/с | 9,88 мс | 201 128 · 9,687 мс | 193 524 · 10,08 мс |
| HyperExpress | 82 443 запр/с | 23,62 мс | 81 093 · 24,09 мс | 83 793 · 23,15 мс |
| micro | 34 330 запр/с | 41,12 мс | 34 992 · 41,94 мс | 33 669 · 40,31 мс |
| Fastify | 32 474 запр/с | 38,75 мс | 31 711 · 39,52 мс | 33 236 · 37,99 мс |
| Express | 18 688 запр/с | 66,95 мс | 19 381 · 62,32 мс | 17 994 · 71,58 мс |
Пропускная способность и хвостовая задержка p99 показаны отдельно: высокий темп запросов не должен скрывать рост p99.
Короткий JSON-ответ через async-обработчик.
больше — лучше
меньше — лучше
| Сервер | Пропускная способность · медиана | Задержка p99 · медиана | запуск 1 | запуск 2 |
|---|---|---|---|---|
| swm-core | 156 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 мс |
| HyperExpress | 69 217 запр/с | 28,25 мс | 72 022 · 27,13 мс | 66 413 · 29,36 мс |
| micro | 36 536 запр/с | 39,23 мс | 39 174 · 33,07 мс | 33 897 · 45,4 мс |
| Fastify | 37 130 запр/с | 35,1 мс | 38 049 · 34,4 мс | 36 212 · 35,79 мс |
| Express | 23 445 запр/с | 58,17 мс | 23 262 · 56,44 мс | 23 627 · 59,9 мс |
Скалярные заголовки ответа и повторяющиеся Set-Cookie.
больше — лучше
меньше — лучше
| Сервер | Пропускная способность · медиана | Задержка p99 · медиана | запуск 1 | запуск 2 |
|---|---|---|---|---|
| swm-core | 138 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 мс |
| HyperExpress | 62 886 запр/с | 30,56 мс | 62 075 · 31,16 мс | 63 696 · 29,95 мс |
| micro | 31 741 запр/с | 33,74 мс | 31 543 · 34,4 мс | 31 938 · 33,07 мс |
| Fastify | 30 697 запр/с | 42,78 мс | 30 406 · 42,78 мс | 30 987 · 42,78 мс |
| Express | 18 722 запр/с | 66,79 мс | 18 739 · 66,13 мс | 18 706 · 67,46 мс |
Предварительно проверенный переиспользуемый набор заголовков.
больше — лучше
меньше — лучше
| Сервер | Пропускная способность · медиана | Задержка p99 · медиана | запуск 1 | запуск 2 |
|---|---|---|---|---|
| swm-core | 162 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 мс |
| HyperExpress | 61 378 запр/с | 31,79 мс | 59 692 · 32,42 мс | 63 063 · 31,16 мс |
| micro | 32 408 запр/с | 41,69 мс | 32 720 · 45,4 мс | 32 097 · 37,99 мс |
| Fastify | 32 669 запр/с | 41,63 мс | 32 253 · 44,51 мс | 33 085 · 38,75 мс |
| Express | 18 545 запр/с | 68,16 мс | 18 248 · 70,18 мс | 18 841 · 66,13 мс |
Приём и разбор небольшого JSON-тела.
больше — лучше
меньше — лучше
| Сервер | Пропускная способность · медиана | Задержка p99 · медиана | запуск 1 | запуск 2 |
|---|---|---|---|---|
| swm-core | 31 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 мс |
| HyperExpress | 22 454 запр/с | 8,60 мс | 22 040 · 8,774 мс | 22 869 · 8,433 мс |
| micro | 13 128 запр/с | 14,39 мс | 13 199 · 14,4 мс | 13 058 · 14,4 мс |
| Fastify | 11 255 запр/с | 23,16 мс | 11 082 · 23,62 мс | 11 427 · 22,7 мс |
| Express | 8 713 запр/с | 19,3 мс | 8 935 · 21,39 мс | 8 491 · 17,2 мс |
Замкнутый цикл ping-pong с сообщением размером 64 байта.
больше — лучше
меньше — лучше
| Сервер | Пропускная способность · медиана | Задержка p99 · медиана | запуск 1 | запуск 2 |
|---|---|---|---|---|
| swm-core | 48 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 мс |
| ws | 47 519 сообщ/с | 1,977 мс | 49 388 · 1,855 мс | 45 650 · 2,099 мс |
Тот же сервер swm-core запускается поверх @swarmmachina/swm-uws и эталонного uWebSockets.js. Четыре сбалансированных запуска защищают замену биндинга от регрессий.
performance gate пройден
Одинаковый синхронный GET поверх двух нативных биндингов.
больше — лучше
меньше — лучше
| Сервер | Пропускная способность · медиана | Задержка p99 · медиана | запуск 1 | запуск 2 | запуск 3 | запуск 4 |
|---|---|---|---|---|---|---|
| swm-uws | 204 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 мс |
Одинаковый WebSocket echo поверх двух нативных биндингов.
больше — лучше
меньше — лучше
| Сервер | Пропускная способность · медиана | Задержка p99 · медиана | запуск 1 | запуск 2 | запуск 3 | запуск 4 |
|---|---|---|---|---|---|---|
| swm-uws | 44 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 мс |
Короткая черта показывает медиану. Точки отмечают отдельные запуски, а линия между ними — разброс.
Для пропускной способности больше — лучше. Для p99 меньше — лучше. Значения разных сценариев сравнивать нельзя.
Сравнительный прогон фреймворков и регрессионный baseline — разные серии измерений. Здесь показан только совместный прогон.
Результаты сохранены в репозитории как версионированный снимок. Прогон воспроизводим: ссылка на исходный CI run и полный хеш коммита остаются частью страницы.