Карта производительности
Каждая точка связывает медианную пропускную способность с p99. Лучший баланс находится справа внизу.
- Крупная точка — медиана
- Малые точки — отдельные запуски
← остальные серверы
swm-core 5.1.0 / benchmark snapshot
HTTP и WebSocket: отдельные запуски, throughput, p95/p99, ELU и RSS.
Снимок результатов версионируется вместе с пакетом и связан с исходным CI run.
Каждая точка связывает медианную пропускную способность с p99. Лучший баланс находится справа внизу.
← остальные серверы
Короткий JSON-ответ без асинхронной границы.
больше — лучше
меньше — лучше
| Сервер | Пропускная способность · медиана | Задержка p95 · медиана | Задержка p99 · медиана | ELU · медиана | RSS · медиана | запуск 1 | запуск 2 |
|---|---|---|---|---|---|---|---|
| swm-core | 210 172 запр/с | 4,848 мс | 9,231 мс | 98,76% | 80,47 MiB | 200 670 · 5,04 / 9,687 мс | 219 673 · 4,656 / 8,774 мс |
| uWebSockets.js ref. | 225 143 запр/с | 5,954 мс | 8,602 мс | 98,71% | 81,03 MiB | 224 528 · 4,565 / 8,602 мс | 225 758 · 7,342 / 8,602 мс |
| HyperExpress | 81 566 запр/с | 12,53 мс | 22,7 мс | 98,82% | 90,68 MiB | 83 007 · 12,29 / 23,15 мс | 80 125 · 12,78 / 22,25 мс |
| micro | 34 845 запр/с | 30,0 мс | 42,78 мс | 99,02% | 121,25 MiB | 34 253 · 31,78 / 42,78 мс | 35 436 · 28,22 / 42,78 мс |
| Fastify | 32 653 запр/с | 33,4 мс | 38,37 мс | 99,03% | 120,94 MiB | 32 497 · 33,73 / 37,99 мс | 32 808 · 33,07 / 38,75 мс |
| Express | 19 063 запр/с | 55,89 мс | 64,85 мс | 99,1% | 123,12 MiB | 19 384 · 55,34 / 66,13 мс | 18 742 · 56,44 / 63,57 мс |
Пропускная способность и хвостовые задержки p95/p99 показаны вместе с ELU и RSS: высокий темп запросов не должен скрывать стоимость runtime.
Короткий JSON-ответ через async-обработчик.
больше — лучше
меньше — лучше
| Сервер | Пропускная способность · медиана | Задержка p95 · медиана | Задержка p99 · медиана | ELU · медиана | RSS · медиана | запуск 1 | запуск 2 |
|---|---|---|---|---|---|---|---|
| swm-core | 194 957 запр/с | 5,244 мс | 9,984 мс | 98,74% | 80,65 MiB | 190 187 · 5,348 / 10,28 мс | 199 726 · 5,14 / 9,687 мс |
| uWebSockets.js ref. | 187 866 запр/с | 5,582 мс | 10,29 мс | 98,77% | 81,67 MiB | 196 533 · 5,14 / 9,881 мс | 179 199 · 6,023 / 10,7 мс |
| HyperExpress | 66 594 запр/с | 15,29 мс | 29,11 мс | 98,88% | 91,34 MiB | 69 851 · 14,68 / 27,67 мс | 63 336 · 15,89 / 30,55 мс |
| micro | 35 855 запр/с | 29,73 мс | 41,19 мс | 98,98% | 123,33 MiB | 35 387 · 31,78 / 38,75 мс | 36 322 · 27,67 / 43,63 мс |
| Fastify | 36 734 запр/с | 27,68 мс | 35,82 мс | 99,06% | 123,93 MiB | 37 594 · 27,13 / 34,4 мс | 35 874 · 28,22 / 37,24 мс |
| Express | 22 461 запр/с | 47,7 мс | 54,3 мс | 99,07% | 125,03 MiB | 22 193 · 48,17 / 52,15 мс | 22 728 · 47,23 / 56,44 мс |
Скалярные заголовки ответа и повторяющиеся Set-Cookie.
больше — лучше
меньше — лучше
| Сервер | Пропускная способность · медиана | Задержка p95 · медиана | Задержка p99 · медиана | ELU · медиана | RSS · медиана | запуск 1 | запуск 2 |
|---|---|---|---|---|---|---|---|
| swm-core | 132 414 запр/с | 8,40 мс | 14,4 мс | 98,81% | 81,23 MiB | 135 359 · 7,489 / 14,4 мс | 129 468 · 9,311 / 14,4 мс |
| uWebSockets.js ref. | 147 641 запр/с | 7,063 мс | 13,04 мс | 98,79% | 81,76 MiB | 146 979 · 7,342 / 13,04 мс | 148 303 · 6,783 / 13,04 мс |
| HyperExpress | 60 812 запр/с | 17,22 мс | 32,1 мс | 98,88% | 91,5 MiB | 61 622 · 16,54 / 31,78 мс | 60 002 · 17,9 / 32,42 мс |
| micro | 32 381 запр/с | 32,45 мс | 38,68 мс | 99,03% | 140,72 MiB | 32 267 · 31,16 / 33,73 мс | 32 495 · 33,73 / 43,63 мс |
| Fastify | 32 955 запр/с | 32,45 мс | 41,58 мс | 99,13% | 124,17 MiB | 32 674 · 33,73 / 43,63 мс | 33 236 · 31,16 / 39,52 мс |
| Express | 18 635 запр/с | 59,34 мс | 68,86 мс | 99,07% | 123,93 MiB | 18 897 · 57,57 / 66,13 мс | 18 372 · 61,1 / 71,58 мс |
Предварительно проверенный переиспользуемый набор заголовков.
больше — лучше
меньше — лучше
| Сервер | Пропускная способность · медиана | Задержка p95 · медиана | Задержка p99 · медиана | ELU · медиана | RSS · медиана | запуск 1 | запуск 2 |
|---|---|---|---|---|---|---|---|
| swm-core | 167 566 запр/с | 6,09 мс | 11,71 мс | 98,78% | 80,73 MiB | 159 478 · 6,391 / 12,29 мс | 175 653 · 5,789 / 11,13 мс |
| uWebSockets.js ref. | 189 834 запр/с | 5,456 мс | 10,18 мс | 98,77% | 81,28 MiB | 189 953 · 5,348 / 10,28 мс | 189 715 · 5,564 / 10,08 мс |
| HyperExpress | 59 461 запр/с | 17,38 мс | 32,74 мс | 98,89% | 93,57 MiB | 59 351 · 16,87 / 33,07 мс | 59 570 · 17,9 / 32,42 мс |
| micro | 31 983 запр/с | 32,14 мс | 33,41 мс | 99,06% | 125,33 MiB | 33 588 · 30,55 / 32,42 мс | 30 378 · 33,73 / 34,4 мс |
| Fastify | 32 849 запр/с | 32,45 мс | 43,26 мс | 98,94% | 122,89 MiB | 32 900 · 31,16 / 41,12 мс | 32 797 · 33,73 / 45,4 мс |
| Express | 19 590 запр/с | 54,26 мс | 66,82 мс | 99,07% | 122,92 MiB | 19 512 · 55,34 / 68,81 мс | 19 667 · 53,19 / 64,84 мс |
Приём и разбор небольшого JSON-тела.
больше — лучше
меньше — лучше
| Сервер | Пропускная способность · медиана | Задержка p95 · медиана | Задержка p99 · медиана | ELU · медиана | RSS · медиана | запуск 1 | запуск 2 |
|---|---|---|---|---|---|---|---|
| swm-core | 34 498 запр/с | 3,103 мс | 5,565 мс | 98,76% | 81,38 MiB | 34 982 · 3,133 / 5,455 мс | 34 014 · 3,072 / 5,675 мс |
| uWebSockets.js ref. | 32 704 запр/с | 3,197 мс | 5,964 мс | 98,73% | 82,88 MiB | 33 158 · 3,133 / 5,905 мс | 32 249 · 3,26 / 6,023 мс |
| HyperExpress | 22 147 запр/с | 4,657 мс | 8,776 мс | 98,73% | 141,81 MiB | 22 586 · 4,565 / 8,602 мс | 21 707 · 4,749 / 8,95 мс |
| micro | 13 349 запр/с | 8,27 мс | 14,26 мс | 98,88% | 116,59 MiB | 12 939 · 8,433 / 14,68 мс | 13 759 · 8,106 / 13,84 мс |
| Fastify | 12 030 запр/с | 9,689 мс | 22,93 мс | 98,9% | 260,81 MiB | 11 880 · 9,881 / 22,7 мс | 12 180 · 9,497 / 23,15 мс |
| Express | 9 154 запр/с | 11,7 мс | 21,18 мс | 98,93% | 106,99 MiB | 9 053 · 12,05 / 21,39 мс | 9 255 · 11,35 / 20,97 мс |
Замкнутый цикл ping-pong с сообщением размером 64 байта.
больше — лучше
меньше — лучше
| Сервер | Пропускная способность · медиана | Задержка p95 · медиана | Задержка p99 · медиана | ELU · медиана | RSS · медиана | запуск 1 | запуск 2 |
|---|---|---|---|---|---|---|---|
| swm-core | 101 414 сообщ/с | 0,891 мс | 0,927 мс | 98,06% | 67,3 MiB | 102 070 · 0,882 / 0,918 мс | 100 757 · 0,90 / 0,936 мс |
| uWebSockets.js ref. | 107 613 сообщ/с | 0,815 мс | 0,865 мс | 98,01% | 67,69 MiB | 107 068 · 0,815 / 0,865 мс | 108 158 · 0,815 / 0,865 мс |
| HyperExpress | 104 011 сообщ/с | 0,857 мс | 0,909 мс | 98,14% | 69,43 MiB | 105 131 · 0,848 / 0,90 мс | 102 891 · 0,865 / 0,918 мс |
| ws | 42 505 сообщ/с | 2,047 мс | 2,238 мс | 98,22% | 74,46 MiB | 41 934 · 2,067 / 2,282 мс | 43 075 · 2,027 / 2,194 мс |
Тот же сервер swm-core запускается поверх @swarmmachina/swm-uws и эталонного uWebSockets.js. Четыре сбалансированных запуска защищают замену биндинга от регрессий.
performance gate пройден
Одинаковый синхронный GET поверх двух нативных биндингов.
больше — лучше
меньше — лучше
| Сервер | Пропускная способность · медиана | Задержка p95 · медиана | Задержка p99 · медиана | ELU · медиана | RSS · медиана | запуск 1 | запуск 2 | запуск 3 | запуск 4 |
|---|---|---|---|---|---|---|---|---|---|
| swm-uws | 219 044 запр/с | 4,656 мс | 8,862 мс | 98,72% | 80,42 MiB | 220 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 MiB | 217 243 · 4,656 / 8,95 мс | 226 947 · 4,475 / 8,602 мс | 206 293 · 5,789 / 8,95 мс | 203 693 · 5,04 / 9,497 мс |
Одинаковый WebSocket echo поверх двух нативных биндингов.
больше — лучше
меньше — лучше
| Сервер | Пропускная способность · медиана | Задержка p95 · медиана | Задержка p99 · медиана | ELU · медиана | RSS · медиана | запуск 1 | запуск 2 | запуск 3 | запуск 4 |
|---|---|---|---|---|---|---|---|---|---|
| swm-uws | 104 033 сообщ/с | 0,857 мс | 0,90 мс | 97,98% | 67,17 MiB | 105 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 MiB | 102 945 · 0,865 / 0,918 мс | 101 748 · 0,882 / 0,936 мс | 102 988 · 0,865 / 0,90 мс | 103 628 · 0,848 / 0,918 мс |
Короткая черта показывает медиану. Точки отмечают отдельные запуски, а линия между ними показывает разброс.
Для throughput больше лучше; для p95, p99 и RSS меньше лучше. ELU показывает занятость event loop, а не самостоятельный рейтинг.
Сравнительный прогон фреймворков и регрессионный baseline — разные серии измерений. Здесь показан только совместный прогон.
Результаты сохранены в репозитории как версионированный снимок. Прогон воспроизводим: ссылка на исходный CI run и полный хеш коммита остаются частью страницы.