Первый взгляд на Bun: действительно ли он в 3 раза быстрее, чем Node.js и Deno?

Нравится вам это или не нравится, но инструментарий JavaScript снова стал предметом многочисленных разговоров.

Последняя новость: Bun. Новая среда выполнения JS, сфокусированная на производительности и на том, чтобы быть «все в одном» (среда выполнения, бандлер, менеджер пакетов, транспилятор). Считайте это как Node.js, плюс NPM, плюс tsc, плюс rollup — только быстрее.

Он делает большие заявления, например, в 3 раза быстрее при рендеринге React на стороне сервера. Итак, мы проверили это на практике.

Что делает Bun быстрым?

Команда Bun объясняет свою производительность несколькими вещами:

  • Тонны времени, потраченного на профилирование, бенчмаркинг и оптимизацию
  • Использование языка Zig для низкоуровневого управления памятью и отсутствия скрытого потока управления
  • Использование JavaScript Core, движка внутри Safari, вместо V8, движка внутри Chromium.

Итак, быстрее ли он?

Мы решили разобраться в этом конкретном утверждении из Bun.sh:

На первый взгляд, ничего себе! Но потом я представил, что мой сайт на Next.js вдруг стал в 3 раза быстрее… и, честно говоря, не смог это представить.

Но кто знает, поэтому я стал копать дальше. Первое, что бросилось мне в глаза, — это исходный код бенчмарка. Короче говоря… это не самый «жизненный» пример рендеринга приложения React на сервер.

Не знаю, как вы, но каждый раз, когда я выполняю серверный рендеринг React для реального приложения, происходит гораздо больше событий. Гораздо большее дерево компонентов с бизнес-логикой, библиотеками, реквизитами, состоянием, контекстом и т.д.

Поэтому я создал более полноценное приложение React и решил провести несколько бенчмарков.

Методология

Я создал приложение приборной панели в Mitosis (источник). Оно имеет полное дерево компонентов, бизнес-логику, зависимости, использует props и state и другие типичные особенности React.

Mitosis был выбран для того, чтобы мы могли генерировать код для многих фреймворков, чтобы сравнить их производительность в этом более «реальном мире», ориентированном на приложение, а также вариации — например, React vs Preact, CSS vs styled-components и т.д.

Я создал базовое приложение с Node.js, Deno и Bun. Чтобы более точно повторить результаты Bun, обратите внимание, что мы использовали их собственный форк react-dom/server.

Сначала я хотел избежать этого, но Джарред (создатель Bun) привел хороший довод в пользу того, что реализация react-dom/server в зависимости от платформы уже есть (например, браузер против ноды) и, вероятно, будет продолжаться. В конечном итоге они намерены включить это в ядро React, так что мы будем с осторожным оптимизмом предполагать, что это не за горами.

Затем мы использовали autocannon для измерения пропускной способности (запросов в секунду) каждого сервера исполнения, выполняющего наше приложение React.

Итак, каковы были результаты?

Запуск на моем 2,6 ГГц 6-ядерном Intel Core i7, используя Bun версии 0.1.10, Deno версии 1.25.0, Node.js версии 16.14.0 дал следующие результаты:

┌─────────┬──────────────────┬─────┬─────┬─────┬───────┬─────────┐
│ (index) │       name       │ 1%  │ 50% │ 99% │  Avg  │ Std Dev │
├─────────┼──────────────────┼─────┼─────┼─────┼───────┼─────────┤
│    0    │ 'react-ssr-bun'  │ 500 │ 669 │ 718 │ 650.8 │  71.7   │
│    1    │ 'react-ssr-deno' │ 550 │ 600 │ 630 │  601  │  20.89  │
│    2    │ 'react-ssr-node' │ 267 │ 375 │ 394 │ 366.5 │  35.04  │
└─────────┴──────────────────┴─────┴─────┴─────┴───────┴─────────┘
Вход в полноэкранный режим Выход из полноэкранного режима

Посмотрите полный исходный текст бенчмарков (и дайте мне знать, если вы видите, как можно улучшить методику).

В результате мы видим, что Bun обрабатывает примерно на 75% больше запросов в секунду, чем Node.js, а Deno находится между ними (ближе к Bun, чем к Node).

Должен сказать, я был удивлен. Да, это не в 3 раза быстрее — но на самом деле быстрее с большим отрывом.

Так стоит ли мне теперь переходить на Bun?

Вероятно, нет. В настоящее время он находится в стадии бета-версии и не готов к использованию (многие пользователи сообщают о наличии заметных ошибок). Но, вероятно, стоит обратить на него внимание.

Я должен сказать, что использование Bun CLI, в частности, кажется очень быстрым.

Установка, в частности, происходит настолько быстро, что мне приходится дважды проверять, действительно ли это произошло.

На мой взгляд, это одна из самых интересных областей Bun, учитывая, насколько медленным может быть даже Yarn в моем опыте для средних и больших проектов.

Но это всего лишь результаты и мнение одного человека. А что думаете вы?

Оцените статью
devanswers.ru
Добавить комментарий