PRODСуверенная европейская платформа BaaSОткрыть панель управления →

Производительность · 12 минута чтения

Rust против Node.js: внутренний тест и задержка

Affane Daylami · Fondateur · 5 июля 2026 г.

Вернуться в блог

По данным независимого сообщества, обновленного в августе 2025 года, все платформы Rust выполняют от 18 000 до 22 000 запросов в секунду с задержкой от 1,4 до 1,7 мс. Эквивалентные платформы Node.js ограничивают производительность от 5766 до 9340 запросов в секунду при 3,4–5,5 мс на одном и том же оборудовании (Sharkbench, 24 августа 2025 г.).

Этот текст на английском языке был создан автоматически на основе французского оригинала и еще не проверялся.
Эта страница была переведена автоматически. Английская версия является авторитетной.

Мы не проводили эту скамейку сами: это сторонние деятели, публичные, с источниками и датами. В этой статье подробно описывается то, что они говорят, лежащая в ее основе методология и что она на самом деле меняет при выборе серверной части, а не сравнение Aurabase с конкурентом.

Ядро Aurabase работает на Rust, на axum и tokio — проверено в Cargo.toml монорепозитория, десяти сервисов, использующих одну и ту же зависимость. Но на сегодняшний день мы не опубликовали никаких собственных показателей производительности. Если вы ищете точную задержку Aurabase, ее пока не существует: методология будет стоять перед числом, а не наоборот.

Самое необходимое

  • На Sharkbench (общественный стенд, Ryzen 7 7800X3D, Docker/Linux, 24.08.2025): Actix, Hyper, Axum и Rocket работают с частотой от 18 047 до 21 965 запросов/с при 1,4–1,7 мс. Fastify, Koa и Express ограничивают скорость от 5766 до 9340 запросов/с на стороне Node.js и составляют 3,4–5,5 мс.
  • Среда выполнения весит столько же, сколько и язык: тот же код Express переходит от 5766 запросов/с на Node.js до 18 917 запросов/с на Bun — коэффициент ×3,3 без изменения строки.
  • Разрыв в памяти наиболее очевиден: 8,5 МБ для Axum против 82,5 МБ для Express/Node.js — что соответствует отсутствию сборщика мусора в Rust.
  • На сегодняшний день Aurabase не опубликовала никаких собственных тестов. Ядро Rust/axum/tokio проверяется в коде, а не на производительности.
  • Отдельные цифры ничего не доказывают: аппаратное обеспечение, версия платформы, размер полезной нагрузки и уровень конкуренции влияют на рейтинг больше, чем сам язык.
#
Скамейка

Что показывает недавний сторонний стенд

Sharkbench — это независимый проект сообщества, который измеряет три вещи: способность платформы обрабатывать одновременные HTTP-запросы, операции ввода-вывода и сериализацию JSON. Тест проводится под Docker/Linux на Ryzen 7 7800X3D, последнее общедоступное обновление выпущено 24 августа 2025 г. (Sharkbench.dev/web, по состоянию на 24 августа 2026 г.).

Пропускная способность запросов в секунду, Rust и Node.jsActix (Rust) 21 965 запросов/с, Hyper (Rust) 21 781 запросов/с, Axum (Rust) 21 030 запросов/с, Rocket (Rust) 18 047 запросов/с, Fastify (Node.js) 9 340 запросов/с, Koa (Node.js) 8 828 запросов/с, Express (Node.js) 5766 запросов/с. Источник: Sharkbench, 24 августа 2025 г.05k10k15k20kАктикс (Ржавчина)21 965Гипер (Ржавчина)21 781Аксум (Ржавчина)21 030Ракета (Ржавчина)18 047Фастафи (Node.js)9 340Коа (Node.js)8 828Экспресс (Node.js)5 766

Источник: Sharkbench, 24 августа 2025 г. — Docker/Linux, Ryzen 7 7800X3D.

Axum — фреймворк, который Aurabase использует для своего ядра Rust, проверенный в Cargo.toml — обрабатывает на этом стенде 21 030 запросов в секунду. Express, платформа Node.js, наиболее используемая в производстве, обрабатывает 5766 на одном и том же оборудовании: коэффициент 3,6. Это не единичный случай. Все четыре протестированных фреймворка Rust попадают в узкий диапазон от 18 000 до 22 000 запросов/с, а три протестированных фреймворка Node.js — между 5 766 и 9 340.

На практике «req/s» измеряет пропускную способность при постоянной параллельной нагрузке, а не скорость изолированного запроса на сайте с низким трафиком. Для конечной точки, вызываемой раз в несколько секунд, разница никогда не заметна. Это становится решающим для горячей конечной точки — потока в реальном времени, общедоступного API с интенсивным трафиком, задания, объединяющего тысячи вызовов — где количество запросов, обработанных на одно ядро ​​ЦП, при одинаковом оборудовании напрямую определяет расходы на инфраструктуру.

#
Задержка

Задержка следует той же схеме

Средняя задержка соответствует той же иерархии на этом стенде: от 1,4 до 1,7 мс для протестированных фреймворков Rust по сравнению с 3,4–5,5 мс для протестированных фреймворков Node.js.

Средняя задержка в миллисекундах, Rust и Node.jsActix (Rust) 1,4 мс, Hyper (Rust) 1,5 мс, Axum (Rust) 1,6 мс, Rocket (Rust) 1,7 мс, Fastify (Node.js) 3,4 мс, Koa (Node.js) 3,6 мс, Express (Node.js) 5,5 мс. Источник: Sharkbench, 24 августа 2025 г.0 мс1 мс2 мс3 мс4 мс5 мсАктикс (Ржавчина)1,4 мсГипер (Ржавчина)1,5 мсАксум (Ржавчина)1,6 мсРакета (Ржавчина)1,7 мсФастафи (Node.js)3,4 мсКоа (Node.js)3,6 мсЭкспресс (Node.js)5,5 мс

Источник: Sharkbench, 24 августа 2025 г. — средняя задержка, не p99.

Этот показатель является средним, а не р99. Мусорные паузы в управляемой среде выполнения в основном влияют на очередь отправки — самые медленные запросы, а не медианные. Это тема отдельной статьи из этой серии: , почему отсутствие сборщика мусора меняет задержку p99.

#
Почему

Почему у Rust нет перерыва в сборе мусора, чтобы заплатить

Rust управляет памятью по принципу владения, что проверяется во время компиляции — сборщик мусора не работает в фоновом режиме и не прерывает выполнение. Официальная книга Rust резюмирует это следующим образом: «Ни одна из особенностей владения не замедлит работу вашей программы во время ее работы» (The Rust Programming Language, doc.rust-lang.org, по состоянию на 24 августа 2026 г.). Память освобождается, как только владеющая ею переменная выходит за пределы области действия — известное время во время компиляции, а не непредсказуемая пауза во время выполнения.

ownership.rsrust
fn main() {
    let data = String::from("réponse API"); // `data` владеет строкой
    process(data); // владение уходит отсюда
    // `data` здесь больше недействителен — ни висячего указателя, ни двойного освобождения.
} // `данные` публикуются здесь детерминированно

fn process(s: String) {
    println!("{s}");
} // `s` здесь выходит за рамки: немедленный выпуск, без прохода по сборке мусора

Node.js, наоборот, работает в одном потоке JavaScript и делегирует операции ввода-вывода ядру через многофазный цикл событий (таймеры, отложенные обратные вызовы, опрос, проверка...) — но любые синхронные вычисления в этом потоке, включая этап сборки мусора из движка V8, блокируют выполнение во время его работы (официальная документация Node.js, nodejs.org, доступ к августу 24, 2026). Это разница в модели памяти, а не в деталях реализации.

#
Нюанс

Настоящий сюрприз: среда выполнения весит столько же, сколько язык.

Самый нелогичный результат того же стенда не касается Rust: он касается самого Node.js. Express — один и тот же код, одно и то же API — переходит с 5766 запросов/с на Node.js до 18 917 запросов/с на Bun, в ×3,3 раза, без изменения ни строчки кода приложения (Sharkbench, 24 августа 2025 г.).

Экспресс-пропускная способность в соответствии со средой выполнения JavaScript по сравнению с AxumАксум на Rust: 21 030 запросов/с. Экспресс на Булке: 18 917 запросов/с. Экспресс на Deno: 6088 запросов/с. Экспресс на Node.js: 5766 запросов/с. Один и тот же код Express во всех трех случаях. Источник: Sharkbench, 24 августа 2025 г.05k10k15k20kАксум (Ржавчина, отсылка)21 030Экспресс на булочке18 917Экспресс на Дено6 088Экспресс на Node.js5 766

Источник: Sharkbench, 24 августа 2025 г. — тот же код Express, три среды выполнения JavaScript.

В Deno тот же код Express ограничивается скоростью 6088 запросов/с — близко к Node.js, но далеко от Bun. Язык JavaScript идентичен во всех трех случаях; Именно среда выполнения — ее JS-движок, реализация цикла событий, сборка мусора — меняет игру. Сравнивать «Rust» и «Node.js» без указания среды выполнения, версии и фреймворка — это всё равно, что сравнивать конфигурации, а не языки.

И идти во все это?

На этом же стенде фреймворк Go Gin достигает пика в 3546 запросов в секунду, когда FastHTTP — все еще на Go — достигает 5567 запросов в секунду с задержкой всего 0,7 мс (Sharkbench, 24 августа 2025 г.). Два совершенно разных результата для одного языка: изолированная цифра никогда не суммирует всю экосистему.

#
Методология

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

TechEmpower Framework Benchmarks иллюстрирует ту же идею в более широком масштабе. Его репозиторий с открытым исходным кодом был обновлен 24 марта 2026 г., а его последний раунд (раунд 23) был предметом публикации от 16 марта 2026 г. (TechEmpower, по состоянию на 24 августа 2026 г.). В этом проекте выполняется множество типов тестов на сотнях реализаций именно потому, что один тест никогда не представляет собой структуру, не говоря уже о языке.

Компания Convex, игрок на рынке баз данных, сформулировала наиболее четкую позицию по этому вопросу: отказываясь участвовать в маркетинговой «войне гистограмм» между конкурирующими базами данных, которая считается вводящей в заблуждение. «Это масштабирование театра, а не масштабирование»,, пишет команда (Convex, по состоянию на 24 августа 2026 г.). Мы разделяем это мнение: голая цифра без опубликованной методологии ничего не доказывает — ни для конкурента, ни для нас.

Что это меняет конкретно: аппаратное обеспечение (ЦП, ОЗУ), точная версия платформы и время выполнения, размер полезной нагрузки JSON, уровень конкуренции и продолжительность теста — все это влияет на рейтинг — иногда больше, чем сам выбор языка. Стенд, который не публикует эти параметры, не воспроизводит и, следовательно, не проверяет себя — см. нашу полную и воспроизводимую методологию для сравнительного анализа серверной части.

#
Аурабаза

Причем здесь Аурабейс?

Основной бэкэнд Aurabase написан на Rust, на axum и tokio — проверено в Cargo.toml монорепозитория: десять сервисов (aura-gateway, aura-auth, aura-db…) используют одну и ту же зависимость рабочего пространства axum (0.8) и одну и ту же среду выполнения tokio, в 2021 г. издание. Шлюз, который маршрутизирует трафик плоскости данных и плоскости управления, в дополнение к axum использует hyper — полную информацию можно найти в нашей статье об архитектуре плоскости данных/управления шлюза. Структура рабочей области Cargo, поддерживающей эти десять сервисов, описана в нашей статье о рабочей области Cargo.

Чего у нас еще нет, так это опубликованных данных о пропускной способности или задержке Aurabase с документированной методологией и аппаратным обеспечением. Это намеренно: мы предпочитаем публиковать методологию перед рисунком, а не наоборот — это тема будущей статьи этой серии.

Для полного сравнения архитектуры — унифицированного ядра Rust в Aurabase и гетерогенного стека Elixir/Go/TypeScript/Node, задокументированного у прямого конкурента — см. наше подробное сравнение Aurabase и Supabase. Если вы уже выполняете миграцию проекта, руководство по миграции Supabase на Aurabase описывает схему, политики RLS и SDK.

#
Данные

Приложение: полная таблица данных

Все строки, приведенные в этой статье, опубликованы Sharkbench 24 августа 2025 г. (Docker/Linux, Ryzen 7 7800X3D).

РамкиВремя выполненияЗапрос/ыЗадержкаПамять
АктиксРжавчина21 9651,4 мс16,6 МБ
ГиперРжавчина21 7811,5 мс8,6 МБ
АксумРжавчина21 0301,6 мс8,5 МБ
РакетаРжавчина18 0471,7 мс6,4 МБ
ФиксироватьNode.js9 3403,4 мс57,0 МБ
КоаNode.js8 8283,6 мс53,3 МБ
ВыражатьNode.js5 7665,5 мс82,5 МБ
Выражатьбулочка18 9171,3 мс53,3 МБ
ВыражатьДено6 0885,0 мс130,7 МБ
ДжинИдти3 5461,0 мс16,7 МБ
ФастHTTPИдти5 5670,7 мс13,4 МБ

Приведите эти данные: Sharkbench, «Бенчмарки веб-платформы», Sharkbench.dev/web, последнее обновление 24 августа 2025 г.

#
Часто задаваемые вопросы

Часто задаваемые вопросы

Означает ли это, что Node.js — плохой выбор?+
Нет. Node.js остается надежным выбором для многих бэкэндов, особенно если команда уже владеет TypeScript и нагрузка не зависит от вычислений на ЦП. Разрыв, измеряемый здесь, заключается в общей пропускной способности и задержке в условиях высокой конкуренции, а не в производительности разработки или экосистеме пакетов. На Bun разрыв с Rust значительно сокращается (18 917 запросов/с для Express по сравнению с 21 030 для Axum): выбор среды выполнения имеет такое же значение, как и выбор языка.
Почему Express такой медленный по сравнению с другими платформами Node.js?+
В этом тесте Express (5766 запросов/с на Node.js) является самым медленным из протестированных фреймворков Node.js после Koa (8828) и Fastify (9340). Express появился в 2010 году, и его дизайн ориентирован на простоту промежуточного программного обеспечения, а не на чистую пропускную способность. В то же время выбор платформы уже создает разрыв в ×1,6 между Express и Fastify (Sharkbench, 24 августа 2025 г.).
Как был достигнут этот ориентир и можем ли мы его воспроизвести?+
Тестовый стенд, упомянутый в этой статье, разработан Sharkbench, независимым проектом сообщества, который тестирует одновременные HTTP-запросы, ввод-вывод и сериализацию JSON в Docker/Linux на Ryzen 7 7800X3D с окончательным общедоступным обновлением 24 августа 2025 г. (sharkbench.dev/web). Это не стенд Aurabase — мы сами его не запускали и не проверяли; мы цитируем его, потому что его методика и материалы публикуются, в отличие от многих деятелей маркетинга.
Опубликовала ли Aurabase свои собственные тесты?+
Нет, не на сегодняшний день. Ядро Aurabase Rust/axum/tokio проверено в исходном коде монорепо, но никаких показателей пропускной способности или задержки, специфичных для Aurabase, не измерялось и не публиковалось. В этой статье сравниваются Rust и Node.js в целом на основе сторонних тестов — это не сравнение Aurabase с конкурентом.
Разница в пропускной способности и памяти. Какая разница в счетах за инфраструктуру?+
На приведенном тесте Axum потребляет 8,5 МБ памяти по сравнению с 82,5 МБ для Express на Node.js — коэффициент, близкий к ×10 (Sharkbench, 24 августа 2025 г.). Меньший объем памяти на экземпляр и большее количество запросов, обрабатываемых на одно ядро ​​ЦП, позволяют при равном трафике выдерживать ту же нагрузку с меньшим количеством экземпляров. Однако реальный эффект зависит от вашего профиля нагрузки (связанного с вводом-выводом или с учетом ЦП) и вашего облачного провайдера — эта цифра не является автоматическим обещанием экономии.
#
Заключение

Что следует помнить

На приведенном здесь стенде все фреймворки Rust работают в узком диапазоне — от 18 000 до 22 000 запросов/с, 1,4–1,7 мс — намного опережая фреймворки Node.js на самом Node.js (5766–9340 запросов/с, 3,4–5,5 мс). Но среда выполнения меняет ситуацию не меньше, чем язык: Express на Bun почти догоняет Axum на Rust.

Если вы оцениваете серверную часть только по чистой производительности, перед цифрой укажите методологию: оборудование, версию, размер полезной нагрузки, уровень конкуренции. Aurabase еще не опубликовала собственные данные; когда это произойдет, методология будет на первом месте.

ГОТОВЫ К РАЗВЕРТЫВАНИЮ?

Ваш бэкэнд за пять минут.

Кредитная карта не требуется · 500 МБ бесплатно · 50 000 MAU