Bun 1.0 вышел: универсальная среда выполнения бросает вызов Node.js

2 мин

1. Новый конкурент среди сред выполнения JavaScript

Более десяти лет Node.js был синонимом серверного JavaScript. Хотя Deno предложил новые идеи в области безопасности и современных API, положение Node.js, казалось, никогда по-настоящему не подвергалось угрозе. Однако в сентябре 2023 года с официальным выпуском Bun 1.0 ситуация, возможно, начала меняться.

Bun — не просто еще одна среда выполнения JavaScript. Это ориентированный на производительность универсальный набор инструментов, разработанный с нуля и призванный охватить весь жизненный цикл от разработки до развертывания.

2. Основа Bun: скорость, скорость и еще раз скорость

Главная цель Bun — производительность. Для ее достижения проект сделал несколько необычных технических выборов:

  • Язык Zig: В основе Bun лежит код на Zig — современном системном языке программирования, ориентированном на производительность и контроль памяти, что позволяет предельно оптимизировать низкоуровневые детали.
  • Движок JavaScriptCore: В отличие от Node.js и Deno, использующих движок Google V8, Bun выбрал Apple JavaScriptCore (JSC). JSC известен более быстрым запуском и, как правило, меньшим потреблением памяти.

Благодаря этим решениям Bun демонстрирует впечатляющие показатели при запуске скриптов, выполнении bun install и работе встроенных API.

3. Не только среда выполнения

Универсальный дизайн Bun — еще одна его важная особенность. Это не просто замена команде node: в него также встроены:

  • Менеджер пакетов: bun install работает в несколько, а иногда и в десятки раз быстрее npm install. Глобальный кеш модулей и эффективные алгоритмы разрешения зависимостей значительно сокращают время установки.
  • Инструмент сборки/сборщик: Bun включает высокопроизводительный сборщик, способный напрямую упаковать проект в исполняемый файл или код для браузера, а его производительность сопоставима с esbuild.
  • Встроенный транспайлер: Файлы TypeScript (.ts) и JSX (.jsx, .tsx) можно запускать напрямую, без предварительной настройки tsc или babel. Bun преобразует их во время выполнения с очень высокой скоростью.
  • Средство запуска тестов: bun test предоставляет тестовую среду с высокой совместимостью с Jest, но работает гораздо быстрее.

Это означает, что для нового проекта может быть достаточно установить единственный инструмент bun, чтобы выполнять весь процесс разработки, тестирования и сборки.

4. Совместимость с Node.js

Чтобы упростить миграцию, команда Bun вложила значительные усилия в совместимость с API Node.js. Bun поддерживает разрешение node_modules, модули CommonJS (require) и ESM (import), а также многие основные модули Node.js, такие как fs, path и http.

Теоретически многие существующие проекты Node.js можно запускать непосредственно с помощью bun и сразу получать прирост производительности.

5. Трудности и будущее

Появление Bun бросает вызов давней философии фронтенд-сообщества — «комбинировать небольшие специализированные инструменты». Его универсальная модель обеспечивает непревзойденное удобство и высокую производительность из коробки, но может пожертвовать частью гибкости.

Node.js обладает огромной и зрелой экосистемой, до которой Bun вряд ли сможет дорасти в краткосрочной перспективе. Тем не менее выпуск Bun 1.0 показал, что он готов к производственной среде. Его впечатляющая производительность и целостный процесс разработки чрезвычайно привлекательны для новых проектов и команд, стремящихся к максимальной эффективности.

Независимо от того, сможет ли Bun в будущем пошатнуть положение Node.js, его появление уже придало новый импульс развитию инструментов JavaScript и установило новый ориентир производительности.