Назад в архив
III. Платформа, DevOps и безопасностьдополнительносоло

Hello-World Benchmarks (C / Bun / Django / FastAPI)

Персональный бенчмарк-эксперимент: сравнение пропускной способности «hello world» серверов на C (facil.io), ElysiaJS/Bun, Django и FastAPI под нагрузкой bombardier — с готовым к публикации блог-постом и графиками.

Статус
прототип
Период
n/a
AI-сессий
Стек
Языки
TypeScriptCPython
Фреймворки · Инфра
ElysiaJS (Bun)facil.ioDjangoFastAPI/uvicorn
§01

Обзор

  • Что это: Исследовательский бенчмарк-проект. Один и тот же эндпоинт «hello world» реализован на 4 стеках, прогнан под нагрузкой (bombardier), с замерами RPS/latency/throughput + CPU/RAM. Результаты сведены в benchmark-results.md (сырые цифры) и benchmark-blog.html (вылизанный пост с таблицами/графиками).
  • Тип / статус / роль: other (бенчмарк/эксперимент) / prototype (разовый прогон) / solo — песочница пользователя.
  • Активный период: git в корне нет; файлы датированы ~2025-07-19. Разовый эксперимент, не поддерживается.
§02

Стек

  • Языки: TypeScript (Bun), C, Python.
  • Фреймворки под тестом (из реальных исходников):
  • ElysiaJS на Bun (bun_hello/index.ts) — роуты /, /json, /echo, /health; тестировался в скомпилированном и нескомпилированном вариантах.
  • facil.io (C) (c_hello/main.c + Makefile) — низкоуровневый HTTP-обработчик с ручным роутингом по path.len/strncmp, content-type через http_mimetype_find, запуск через fio_start(.threads=4, .workers=2); сборка gcc -O3 -pthread.
  • Django (django_hello/, uv + .venv, со своим .git и db.sqlite3).
  • FastAPI + uvicorn (fast/fastapi-hello-world/main.py) — async-роуты, PlainTextResponse/JSONResponse, Python ≥3.12, uv-lock.
  • Инструменты замеров: bombardier (генератор нагрузки на Go); собственные мониторы CPU/RAM — monitor_performance.py (psutil: находит процесс по порту через net_connections, пишет CSV, считает avg/peak) и monitor-performance.sh (bash: lsof -ti + ps/awk, CSV + summary). MONITORING_GUIDE.md перечисляет 6 подходов к мониторингу (psutil, time -l, docker stats, top/htop/pidstat, hyperfine/ab/wrk).
  • Инфра/деплой: нет — локальные прогоны.
  • Данные: CSV-дампы метрик (facilio-stats.csv, пустой), benchmark-results.md.
§03

Что реализовано

Истории git в корне нет — реконструировано по файлам.

  • Реализовано 4 эталонных «hello world» сервера (по одному на стек), нормализованных до сопоставимого ответа.
  • Написано 2 инструмента мониторинга ресурсов (Python + bash) с агрегацией avg/peak и CSV-дампами.
  • Проведена серия прогонов bombardier: 125 conn × 1M запросов (×2) и 125–300 conn × 2M запросов; по 3 теста на стек с разбросом (± std).
  • Результаты задокументированы дважды: технический benchmark-results.md и презентационный benchmark-blog.html («Web Framework Performance Benchmark — 2025», с таблицей и блоками RPS/Latency/Throughput).
  • Объём: ~4 мини-сервера + 2 скрипта + 2 отчёта. Компактный, но завершённый эксперимент с публикабельным выводом.
§04

Технические челленджи

Только то, что подтверждают файлы.

  • Честность сравнения → один и тот же тривиальный ответ на всех стеках, единый инструмент нагрузки (bombardier), фиксированные конфигурации (125/300 conn, 1–2M запросов), по 3 повтора с указанием σ — показывает понимание «как мерить, чтобы было сопоставимо» (benchmark-results.md, блог «Test Methodology»).
  • Низкоуровневый C-сервер (c_hello/main.c) → ручной роутинг по длине пути и strncmp, явная установка content-type, много-поточный/много-процессный запуск facil.io (.threads=4, .workers=2), сборка с -O3. Показывает уверенность в C и системном HTTP вне фреймворков.
  • Собственный мониторинг ресурсовmonitor_performance.py мапит порт→PID через psutil.net_connections(), семплит CPU/RAM ~1/с, считает avg/peak, пишет CSV; bash-версия делает то же через lsof+ps+awk. Это не просто «запустил wrk» — это инструментирование под процессом.
  • Контринтуитивный результат (главный вывод): ElysiaJS/Bun (~81.9k RPS, 1.52ms) обошёл C/facil.io (~75.5k RPS, 2.41ms) по RPS и latency на hello-world; скомпилированный и нескомпилированный Elysia дали практически одинаковый результат. Python-стек медленнее на порядок: FastAPI ~8.8k, Django ~5.5k RPS (Django к тому же выдал единичные connection errors на 1M). Сильный нарративный хук.
§05

AI-разработка

  • Найдено сессий: 0 в локальной директории сессий Claude Code. Проверено через нормализацию полных путей — совпадений для этого репозитория нет (только несвязанная директория сессий, принадлежащая deutsch-popper-bench).
  • Косвенные следы AI: в репозитории есть локальные .claude/settings.local.json (в корне и в подкаталогах c_hello, django_hello, fast) и bun_hello/CLAUDE.md — то есть Claude Code/Cursor локально использовался, но транскриптов сессий в глобальном хранилище нет (вероятно, не сохранены/подчищены).
  • Паттерны AI-воркфлоу: данных нет (нет транскриптов).
§06

Достижения и метрики

Измеримое (из benchmark-results.md / блога):

  • Протестировано 4 стека, 5 конфигураций (включая compiled/non-compiled Elysia), по 3 повтора каждая.
  • Итоговый средний RPS: ElysiaJS ~81.9k (1.52ms) · facil.io ~75.5k (2.41ms) · FastAPI ~8.8k (14.1ms) · Django ~5.5k (22.9ms).
  • До 2M запросов на прогон, до 300 одновременных соединений.
  • 2 собственных скрипта мониторинга (Python + bash) + гайд с 6 методами.
§07

Контрибьюторы

git shortlog · все ветки

  1. Boaz Segev2,866
  2. Jan Biedermann91
  3. WHR12
  4. Benjamin Calderon11
  5. Franz Brauße10
  6. Joey Hoek2
  7. Matthew Staveley-Taylor2
  8. 0xflotus1
  9. Ananda Umamil1
  10. Gnanesh1
  11. John W Higgins1
  12. Max Schrementi1
20 контрибьюторов· ещё +8 не показаны3007 коммитов всего
Сейчас

Открыт к ролям Senior / Staff инженера и избранному фрилансу — продакшн-AI, платформы и full-stack разработка.

Связаться