Pull to refresh

Разработчик провёл простой HTTP-тест «Go против Rust против Bun против Node», чтобы оценить производительность Bun 1.0

Reading time2 min
Views8.4K

Разработчик Эмиль Привер решил провести простой HTTP-тест «Go против Rust против Bun против Node», чтобы оценить производительность Bun 1.0.

Привер создал эталонный тест для измерения количества HTTP-вызовов, которые сервер может обработать в секунду. В тесте сравнивается производительность Bun с GO, Rust и Node, поскольку эти языки часто используются веб-разработчиками для аналогичных целей.

Тест проводился как локально, так и на сервере Linode с двумя выделенными ядрами ЦП и 4 ГБ ОЗУ с ОС Debian 11

Все четыре теста были скомпилированы и запущены с использованием следующих команд:

  • Bun: bun build --minify ./index.ts --outfile benchmark.js && bun run ./benchmark.js;

  • Rust: cargo build -r && ./taget/release/rust;

  • GO: go build -o benchmark ./cmd && ./benchmark;

  • Node: node benchmark.js.

В тесте Привер использовал такие версии сред выполнения:

  • Rust: rustc 1.74.0-nightly (b4e54c6e3 2023-09-11);

  • GO: go version go1.21.0 darwin/arm64;

  • Bun: 1.0.0;

  • Node: v20.6.1.

Тест проводился со 100 одновременными подключениями, работавшими в течение 1 минуты, и во всех средах выполнения использовалась многопоточность. HTTP-тесты проводились с использованием wrk (HTTP benchmarking tool). Языки программирования в тесте используют встроенный HTTP-сервер, за исключением Rust, который использует Axum и Tokio, поскольку в Rust нет встроенного HTTP-сервера.

Прежде чем показать результаты, Привер пояснил, что задумал этот тест в основном из любопытства, так как хотел посмотреть, существует ли среда выполнения JS, которая могла бы работать почти так же быстро, как Rust и Go. Он не большой поклонник JS в целом, главным образом потому, что ему не нравится писать на этом языке, но он также чувствовал, что не существует среды выполнения JS, которая была бы «достаточно хорошей». По его мнению, в мире JS недавно появился Deno, который кажется немного быстрее, но все ещё недостаточно «достаточно хорош».

Локальные результаты теста (сборка на Rust обрабатывает больше запросов в секунду по сравнению с другими реализациями):

Тестирование JSON локально (задача — сериализовать простую структуру JSON и вернуть её). Тут Rust по-прежнему работает лучше всего, за ним следует Go, затем Bun и, наконец, Node:

Запуск теста в облаке (возврат только simple string):

Тестирование JSON в облаке:

«Приятно видеть, что Bun работает хорошо и, похоже, может конкурировать с Rust и Go по HTTP. Я также очень рад, что теперь есть достойная среда выполнения, которая "делает все это". В отличие от таких языков, как Rust и Go, которые предоставляют менеджеры пакетов, Bun также их предоставляет. Node, с другой стороны, имеет различные менеджеры пакетов (хотя NPM поставляется с Node) и множество разных способов достижения одной и той же цели, где каждый метод быстрее других. Хотя я в целом не большой поклонник написания JavaScript, я с нетерпением жду возможности создать что-нибудь с помощью Bun», — подытожил Привер.

В начале сентября состоялся релиз Bun 1.0 - среды выполнения JavaScript и TypeScript с возможностью отладки кода и поддержкой популярных веб-фрейворков. В Bun работают полнофункциональные приложения, созданные с помощью Next.js, Remix, Nuxt, Astro, SvelteKit, Nest, SolidStart и Vite. Разработчики проекта пояснили, что Bun запускается в 4 раза быстрее, чем Node.js. Эта разница только увеличивается при запуске файла TypeScript, который требует транспиляции, прежде чем Node.js сможет его запустить.

Tags:
Hubs:
If this publication inspired you and you want to support the author, do not hesitate to click on the button
Total votes 13: ↑12 and ↓1+11
Comments40

Other news