5 октября 2026 г.
Campfire на Rust быстрее Ruby: в замере Basecamp разница достигла 168 раз
Дэвид Хайнемайер Ханссон ставит под вопрос выбор удобного языка, если человек больше не читает код.

DHH
@dhh
Я поручил агентам реализовать и оптимизировать веб-приложение Campfire на Elixir, Go и Rust. Да, Ruby медленнее всех. Меня это не волновало, когда взамен я получал огромный выигрыш в продуктивности и удовольствии от разработки. Но если вы больше не читаете код? https://github.com/basecamp/once-campfire

· 80,2 тыс. просмотров
В замере Basecamp от 4 октября Rust-версия Campfire обработала в 168 раз больше запросов страницы комнаты, чем Ruby.
Ханссон поручил ИИ-агентам реализовать и оптимизировать чат Campfire на других языках. Раньше он принимал меньшую скорость Ruby ради продуктивности и удовольствия разработчика. Теперь он спрашивает, насколько важен этот компромисс, если разработчик больше не читает код.
Насколько отличаются версии
Скорость под нагрузкой. Basecamp сравнила версии на одинаковых данных, выделив каждой по 4 аппаратных потока AMD Ryzen AI MAX+ 395. Для страницы комнаты использовали 16 клиентов и production-серверы с gzip, результаты взяли по медианам двух запусков.
| Версия Campfire | Запросы страницы комнаты в секунду | Порог времени отправки сообщения для 99% запросов, мс | | --- | ---: | ---: | | Ruby | 216 | 368,3 | | Elixir | 722 | 83,1 | | Go | 3 860 | 59,7 | | Rust | 36 260 | 14,5 |
Отправку сообщений Basecamp измеряла отдельно, при 64 клиентах. В этом тесте Rust сократил время ожидания даже у медленных запросов.
В отдельном сравнении от 1 октября Rust также требовал меньше ресурсов для запуска и работы чата.
| Метрика | Rails | Rust | | --- | ---: | ---: | | Запуск с нуля | 2 731 мс | 157 мс | | Память контейнера в простое | 393 МБ | 20 МБ | | Сжатый Docker-образ | 359 МБ | 67 МБ |
Rails-контейнер включал Redis и Thruster. Rust работал одним процессом.
Go-версию Basecamp тоже ускорила после первого результата. В отдельном замере от 4 октября с 16 HTTP-клиентами и 4 CPU для приложения получились такие изменения:
| Операция | До оптимизации, запросов/с | После, запросов/с | Прирост | | --- | ---: | ---: | ---: | | Страница комнаты | 10 175 | 15 218 | 49,6% | | Отправка сообщения | 4 025 | 5 036 | 25,1% |
Как запустить готовый чат
Rust уже упакован. Готовый Docker-образ поддерживает amd64 и arm64. Через ONCE его разворачивают командой `once deploy ghcr.io/basecamp/once-campfire-rust --host chat.example.com`, заменив домен своим.
Rust-версия сохраняет формат SQLite-базы, файлового хранилища и подписанных либо зашифрованных cookies Rails. Для перехода без миграции данных и выхода пользователей нужно сохранить `/rails/storage` и прежние secrets.
Go-версию для локального запуска собирают из исходников. README перечисляет зависимости:
- Go 1.27.1 и компилятор C. - pkg-config, libvips и libzstd. - ffmpeg и Python 3.
После `git submodule update --init --recursive` выполняют `bin/build`, задают `SECRET_KEY_BASE` и запускают `DISABLE_SSL=1 HTTP_PORT=8080 ./campfire server`. Первичная настройка открывается по адресу `http://localhost:8080/first_run`.
Для Elixir-версии README описывает сборку эталонной Rails-версии, подготовку инструментов, зависимостей и ресурсов приложения. С Elixir 1.19.5 и OTP 28 затем собирают образ командой `docker build -t campfire-elixir:release .` и запускают Docker.
Дэниел Коллин, известный как emoon, внёс в Rust-версию через PR #43 оптимизации обработки задач базы, форматированного текста и gzip для кешированных страниц.
Первоисточник