Доступна серверная JavaScript-платформа Bun 1.0, более быстрая, чем Deno и Node.js

Представлен первый значительный выпуск платформы Bun, предназначенной для обособленного выполнения приложений, написанных на языках JavaScript, JSX и TypeScript. Проект нацелен на использование в качестве прозрачной замены платформы Node.js, поддерживает используемые в Node.js механизмы работы с модулями и обработки зависимостей. Код проекта написан на языках Zig и С++, и распространяется под лицензией MIT. Для выполнения JavaScript задействован JavaScript-движок JavaScriptCore и компоненты проекта WebKit с дополнительными патчами.

В состав Bun входит полный набор компонентов для создания и выполнения приложений на языках JavaScript и TypeScript. Среди прочего, платформа предоставляет runtime для создания серверных обработчиков и выполнения JavaScript-приложений без браузера, совместимый с NPM пакетный менеджер, инструментарий для выполнения тестов, система сборки самодостаточных пакетов и утилита bunx для установки и запуска пакетов из репозитория NPM (эквивалент npx и yarn dlx).

Заявлены такие цели, как возможность запуска большей части существующих серверных JavaScript-приложений, достижение более высокой производительности и предоставление инструментов для снижения сложности разработки и повышения производительности труда. Проект также предоставляет минимальный набор оптимизированных API для эффективного выполнения таких задач, как запуск HTTP-сервера и работа с файлами. Поддерживается режим “bun –hot” для автоматической горячей перезагрузки кода в случае изменения файлов приложения, выполняемой без остановки работы программы (т.е. при перезагрузке установленные соединения не будут оборваны и состояние не будет потеряно).

Особенностью Bun является очень высокая производительность. Например, в тестах на выполнение серверного приложения на базе фреймворка React применение Bun демонстрирует в два раза большую пропускную способность (число обработанных приложением HTTP-запросов в секунду), чем платформа Deno и в 4.7 раза, чем Node.js. В тесте на работу чат-сервера, использующего WebSocket, Bun обгоняет Deno в два раза, а Node.js – в 6 раз. В тесте загрузки больших таблиц из SQLite платформа Bun быстрее Deno в два раза, а Node.js – в 4 раза.

Выполнение установки приложений при помощи команды “bun install” производится в 25 раз быстрее, чем при использовании “npm install”, а сборка командой “bun build” в 1.76 быстрее esbuild, в 26 раз быстрее rspack, в 155 раз быстрее Parcel 2 и в 224 раза быстрее WebPack 5. По сравнению с Node.js и Deno, использующими JavaScript-движок V8, Bun построен на базе фреймворка JavaScriptCore, развиваемого компанией Apple для браузера Safari. Кроме более высокой производительности применение JavaScriptCore также позволило обеспечить более низкое потребление памяти.

Проект развивается с оглядкой на обеспечение совместимости с серверными приложениями, написанными для Node.js, поддерживает большую часть API Node.js, включая модули и структуры fs, path, http, process, __dirname и Buffer. Поддерживается и традиционный Web API, включая объекты fetch, WebSocket и ReadableStream. Предоставляется совместимость как с модулями Node.js (CommonJS и node_modules), так и с JavaScript-модулями (ESM), созданными в соответствии со спецификацией ECMAScript 6 и применяемыми в web-приложениях. В текущем виде большинство npm-пакетов, созданных для Node.js, могут быть запущены в Bun без внесения изменений или с минимальными правками. Поддерживаются многие серверные фреймворки, такие как Express, Koa и Hono.

Платформа также может заменить собой множество сопутствующих инструментов, развиваемых для экосистемы Node.js. Например, Bun может использоваться для запуска файлов с расширениями .js, .ts, .cjs, .mjs, .jsx и .tsx, заменяя такие системы, как tsc, babel, ts-node, ts-node-esm и tsx. Встроенная система сборки обособленных программ позволяет обойтись без esbuild, webpack, parcel и rollup. Встроенный пакетный менеджер может заменить npm, yarn, pnpm и lerna, предоставляет команды, совместимые с npm, обрабатывает package.json и записывает результат в каталог node_modules.

Release. Ссылка here.