javascript-runtimes · 13 мин чтения

Bun vs Deno vs Node.js в 2026: полное сравнение JavaScript-рантаймов

Bun Deno Node.js JavaScript TypeScript runtime
Содержание

В 2026 году JavaScript-разработчики впервые оказались в ситуации, когда три production-ready рантайма конкурируют за одни и те же проекты. Node.js правит экосистемой уже 17 лет, но Bun поражает скоростью, а Deno предлагает безопасность, о которой другие рантаймы могут только мечтать. Какой из них выбрать для нового проекта? Стоит ли мигрировать с Node.js? В этой статье мы разберём каждый рантайм по косточкам: архитектура, производительность, экосистема, безопасность и реальный опыт использования в production.

Статья будет полезна бэкенд-разработчикам, DevOps-инженерам и тимлидам, которые принимают решение о технологическом стеке для новых или существующих проектов.

Краткий обзор участников

Node.js — ветеран экосистемы

Node.js появился в 2009 году и фактически создал серверный JavaScript как индустрию. Текущая LTS-версия — Node.js 24 (Krypton), которая вышла в октябре 2025 года и будет поддерживаться до апреля 2028 года. На GitHub проект набрал около 116 000 звёзд.

Node.js работает на движке V8 (тот же, что в Chrome), использует C++ и событийный цикл на базе libuv. В Node.js 24 появились обновлённый V8 13.6, npm 11, улучшенная модель разрешений (флаг --permission), поддержка Float16Array, синтаксис using и await using для автоматического освобождения ресурсов и встроенный HTTP-клиент Undici 7.

Экспериментальная поддержка TypeScript через флаг --experimental-strip-types присутствует, но остаётся ограниченной: не поддерживаются enum-ы, namespace-ы и другие продвинутые конструкции TS.

Bun — скорость как философия

Bun создан компанией Oven (основатель — Джарред Саммер) и позиционируется как «all-in-one» замена для Node.js, npm, webpack и Jest одновременно. Текущая версия — Bun 1.3.9 (февраль 2026), а на GitHub проект имеет 87 600 звёзд.

Ключевое архитектурное отличие: Bun использует движок JavaScriptCore (из Safari) вместо V8, а системный код написан на Zig с использованием io_uring для асинхронного I/O на Linux. JavaScriptCore оптимизирован для быстрого старта, что объясняет доминирование Bun в бенчмарках холодного запуска.

Bun 1.3 принёс множество возможностей: zero-config фронтенд-разработку с встроенным HMR, унифицированный SQL API (Bun.SQL) для PostgreSQL, MySQL и SQLite без внешних зависимостей, встроенный Redis-клиент, каталоги зависимостей для монорепозиториев и интеграцию с VS Code для тестов.

Deno — безопасность и стандарты

Deno создан Райаном Далом — тем самым автором Node.js — как попытка исправить ошибки дизайна оригинального рантайма. Текущая версия — Deno 2.6.10 (февраль 2026), 106 000 звёзд на GitHub.

Deno работает на V8, но системный код написан на Rust. Главная особенность — модель безопасности на основе разрешений: по умолчанию скрипт не имеет доступа к файловой системе, сети или переменным окружения. Каждый тип доступа нужно разрешать явно через флаги CLI.

В Deno 2.6 появились: команда dx (аналог npx для npm и JSR-пакетов), подкоманда deno audit для проверки уязвимостей в зависимостях, экспериментальный permission broker для продвинутого управления разрешениями, покрытие кода из Worker-потоков и обновлённый V8 14.2.

Архитектура и движки

Выбор JavaScript-движка — фундаментальное решение, определяющее характер каждого рантайма.

Node.js и Deno оба используют V8 — движок, оптимизированный для долгоживущих процессов с агрессивной JIT-компиляцией. V8 отлично справляется с кодом, который работает долго и «прогревается» со временем.

Bun выбрал JavaScriptCore (JSC) — движок из WebKit/Safari. JSC использует другую стратегию оптимизации: он быстрее запускается и начинает исполнять код с меньшей задержкой, но для долгоживущих процессов разница с V8 сглаживается.

Системный слой тоже различается кардинально:

  • Node.js: C++ + libuv (кроссплатформенная абстракция над epoll/kqueue/IOCP)
  • Deno: Rust + tokio (асинхронный рантайм для Rust)
  • Bun: Zig + io_uring (прямое взаимодействие с ядром Linux для I/O)

Использование io_uring даёт Bun преимущество на Linux: вместо системных вызовов для каждой I/O-операции, запросы пакетно отправляются в кольцевой буфер ядра. Это сокращает количество syscall-ов в десятки раз — например, операция установки пакетов, которая требует около 1 000 000 системных вызовов в npm, в Bun выполняется за ~165 000.

Производительность: бенчмарки 2026 года

HTTP-сервер: запросы в секунду

Бенчмарки 2026 года показывают значительные различия в пропускной способности HTTP-серверов:

РантаймЗапросов/сек (Express-style)Запросов/сек (нативный API)Холодный старт
Bun 1.3~52 000~68 0008–15 мс
Deno 2.6~29 000~35 00040–60 мс
Node.js 24~14 000~20 00060–120 мс

Bun обрабатывает в 2–3.5x больше запросов, чем Node.js, и в 1.5–2x больше, чем Deno. При использовании нативных API Bun (вместо Express-совместимого слоя) разрыв увеличивается ещё больше.

Холодный старт

Для serverless-окружений и edge computing критичен холодный старт. Bun запускается за 8–15 мс — это в 4–10 раз быстрее Node.js (60–120 мс). Одна компания, переведя serverless-функции на Bun, сократила время выполнения на 35%, что напрямую снизило счета за AWS Lambda.

Установка пакетов

Пакетный менеджер Bun — один из самых впечатляющих компонентов. Сравнение на чистом кэше (Node.js 22, Ubuntu):

Менеджер50 пакетов800 пакетовCI/CD (полный цикл)
bun install0.3 сек1.2 сек3 сек
npm install3.2 сек24.6 сек48 сек
yarn21 сек
pnpm14 сек

Bun в 20–40 раз быстрее npm благодаря бинарному lockfile (bun.lockb), глобальному кэшу и параллельной загрузке. Обратная сторона: bun.lockb — бинарный файл, его нельзя прочитать или отредактировать в diff при код-ревью.

Поддержка TypeScript

TypeScript стал де-факто стандартом в JavaScript-экосистеме, и подход к его поддержке — важный критерий выбора рантайма.

Deno — лидер в этой категории. TypeScript поддерживается нативно с первого дня: файлы .ts импортируются и выполняются напрямую, без настройки, без tsconfig.json, без дополнительных инструментов. REPL Deno тоже понимает TypeScript.

Bun следует той же философии: выполняет TypeScript напрямую с нулевой конфигурацией, производительность при этом сопоставима с выполнением скомпилированного JavaScript.

Node.js отстаёт: экспериментальная поддержка через --experimental-strip-types только убирает аннотации типов, но не поддерживает продвинутые конструкции TypeScript вроде enum, namespace или декораторов. Для полноценной работы по-прежнему нужны ts-node или tsx.

// Deno и Bun: просто запускаем .ts файл
// deno run server.ts
// bun run server.ts

interface Config {
  port: number;
  host: string;
}

const config: Config = {
  port: 3000,
  host: "localhost",
};

console.log(`Server starting on ${config.host}:${config.port}`);
# Node.js: требуется флаг или внешний инструмент
node --experimental-strip-types server.ts
# или
npx tsx server.ts

Экосистема и совместимость с npm

Экосистема npm — крупнейшая в мире: более 2.5 миллионов пакетов. Совместимость с ней — ключевой фактор для любого рантайма.

Node.js — это и есть экосистема. 100% совместимость по определению. Всё, что есть в npm, работает в Node.js.

Bun достиг впечатляющей совместимости ~95–98% с Node.js API. Express, Fastify, Prisma, Hono — всё работает. Проблемы возникают с некоторыми нативными аддонами (bcrypt, sharp), но для большинства есть workaround-ы. Bun поддерживает package.json, node_modules и стандартный npm registry.

Deno прошёл долгий путь от полного отказа от npm до ~90–95% совместимости в Deno 2.x. Начиная с Deno 2, можно импортировать npm-пакеты напрямую через npm: спецификатор. Deno 2.6 продолжает улучшать совместимость: исправлена работа package.bin, shimming на Windows, добавлена поддержка subpath imports.

// Deno: импорт npm-пакетов через npm: спецификатор
import express from "npm:express@4";

const app = express();
app.get("/", (req, res) => {
  res.send("Hello from Deno!");
});
app.listen(3000);
// Bun: стандартный Node.js-совместимый импорт
import express from "express";

const app = express();
app.get("/", (req, res) => {
  res.send("Hello from Bun!");
});
app.listen(3000);

У Deno также есть собственный реестр пакетов — JSR (JavaScript Registry), оптимизированный для TypeScript-first модулей и поддерживающий семантическое версионирование. Команда dx из Deno 2.6 позволяет запускать бинарники из npm и JSR аналогично npx.

Безопасность

Deno: sandbox по умолчанию

Модель безопасности Deno — его главное конкурентное преимущество. По умолчанию скрипт не имеет доступа к файловой системе, сети, переменным окружения и подпроцессам. Каждый тип доступа разрешается явно:

# Минимальные разрешения: только сеть и чтение текущей директории
deno run --allow-net --allow-read=. server.ts

# Все разрешения (не рекомендуется для production)
deno run --allow-all server.ts

Это критически важно для защиты от supply chain атак: скомпрометированный npm-пакет не сможет отправить данные на внешний сервер без разрешения --allow-net. В 2026 году Deno добавил deno audit — встроенную проверку CVE для npm и JSR зависимостей.

Однако исследование NDSS 2025 выявило слабые места: разработчики часто используют слишком широкие разрешения, URL-импорты не проверяются системой разрешений, а coarse-grained permissions позволяют обходить ограничения через ambient authority ОС.

Node.js: доверие по умолчанию

Node.js исторически доверяет всему коду полностью. В Node.js 24 экспериментальная модель разрешений (флаг --permission) стала стабильнее, но пока далека от зрелости Deno и не используется в большинстве production-окружений.

Bun: скорость важнее sandbox-а

Команда Bun обсуждала добавление модели безопасности, но на начало 2026 года это не приоритет. Bun доверяет всему коду, аналогично Node.js. Для проектов, где sandboxing критичен, Deno остаётся единственным выбором среди трёх рантаймов.

Встроенные инструменты

Одно из главных преимуществ Bun и Deno перед Node.js — набор встроенных инструментов, который заменяет десятки npm-пакетов.

ИнструментNode.js 24Bun 1.3Deno 2.6
Тест-раннерВстроенный (базовый)bun:test (Jest-совместимый)deno test (полнофункциональный)
БандлерНет (нужен webpack/esbuild/Vite)Встроенный (bun build)Встроенный (deno bundle)
ЛинтерНет (нужен ESLint)Нетdeno lint
ФорматированиеНет (нужен Prettier)Нетdeno fmt
Пакетный менеджерnpm 11bun install (20–40x быстрее npm)Встроенный (npm-совместимый)
TypeScriptЭкспериментальный strip-typesНативныйНативный
Аудит безопасностиnpm auditНет встроенногоdeno audit (новый в 2.6)
HTTP-клиентUndici 7 (встроенный)Нативный fetchНативный fetch
SQLiteНетbun:sqliteНет
S3-клиентНетBun.S3Нет
Markdown-парсерНетBun.markdownНет

Bun идёт по пути «batteries included»: встроенные SQL-клиенты, S3, Redis, Markdown-парсер — всё без внешних зависимостей. Deno фокусируется на инструментах разработки: линтер, форматтер, тест-раннер, аудит. Node.js остаётся минималистичным, полагаясь на экосистему npm.

Практический пример: REST API

Рассмотрим создание простого REST API на каждом рантайме с использованием фреймворка Hono — лёгкого фреймворка, который работает на всех трёх рантаймах:

// app.ts — работает на Bun, Deno и Node.js
import { Hono } from "hono";

const app = new Hono();

app.get("/", (c) => c.json({ message: "Hello from Hono!" }));

app.get("/users/:id", (c) => {
  const id = c.req.param("id");
  return c.json({ id, name: `User ${id}` });
});

export default app;

Запуск на каждом рантайме:

# Bun — просто запускаем файл
bun run app.ts

# Deno — указываем разрешения
deno run --allow-net app.ts

# Node.js — нужен адаптер @hono/node-server
node --experimental-strip-types app.ts

Установка зависимостей:

# Bun (0.3 сек)
bun add hono

# Node.js + npm (3–5 сек)
npm install hono

# Deno — зависимости загружаются автоматически при первом запуске
# или через deno.json:
# { "imports": { "hono": "npm:hono" } }

Когда выбрать Node.js

Node.js остаётся лучшим выбором в следующих сценариях:

  • Enterprise-проекты с большой кодовой базой — максимальная совместимость с npm, отсутствие рисков миграции, огромный пул специалистов на рынке
  • Проекты с нативными аддонами — bcrypt, sharp, canvas, sqlite3 и другие C/C++ модули гарантированно работают только в Node.js
  • Консервативные команды — когда стабильность и предсказуемость важнее скорости: 17 лет продакшена, LTS-поддержка до 30 месяцев, документация на каждый случай жизни
  • React Native и Electron — эти экосистемы по-прежнему тесно связаны с Node.js

Когда выбрать Bun

Bun — оптимальный выбор, когда:

  • Скорость разработки критична — мгновенные пакетные установки, нативный TypeScript, встроенный тест-раннер и бандлер убирают минуты из каждого цикла разработки
  • Serverless и edge computing — холодный старт 8–15 мс против 60–120 мс у Node.js может означать разницу в тысячи долларов в месяц на AWS Lambda
  • Greenfield-проекты — для новых проектов без legacy-зависимостей Bun предлагает лучший DX из коробки
  • Монорепозитории — каталоги зависимостей и изолированные установки из Bun 1.3 специально спроектированы для монорепо
  • Высоконагруженные API — 52 000+ запросов в секунду на Express-style фреймворках, до 68 000 на нативном API

Когда выбрать Deno

Deno будет лучшим выбором, если:

  • Безопасность — приоритет номер один — модель разрешений Deno не имеет аналогов среди рантаймов; для финтеха, здравоохранения и government-проектов это может быть решающим фактором
  • TypeScript-first разработка — Deno создан для TypeScript, здесь лучшая интеграция из коробки
  • Стандарты Web API — Deno следует веб-стандартам (fetch, Streams, Web Workers) ближе, чем конкуренты, что упрощает переиспользование кода между сервером и браузером
  • Supply chain securitydeno audit, изоляция разрешений по зависимостям, проверка целостности — всё встроено
  • Edge-платформы — Deno Deploy предлагает глобальный edge-рантайм с нулевой конфигурацией

Сводная таблица сравнения

КритерийNode.js 24Bun 1.3Deno 2.6
ДвижокV8 (Chrome)JavaScriptCore (Safari)V8 (Chrome)
Системный языкC++ + libuvZig + io_uringRust + tokio
GitHub Stars~116 000~87 600~106 000
Текущая версия24.13.1 LTS1.3.92.6.10
HTTP req/sec~14 000~52 000~29 000
Холодный старт60–120 мс8–15 мс40–60 мс
npm совместимость100%~95–98%~90–95%
TypeScriptЭкспериментальныйНативныйНативный
Модель безопасностиЭкспериментальнаяНетПолноценная (sandbox)
Пакетный менеджерnpm 11bun install (20–40x быстрее)Встроенный
Тест-раннерВстроенный (базовый)bun:test (Jest-совместимый)deno test
БандлерНетВстроенныйВстроенный
Линтер + форматтерНетНетВстроенный
ЛицензияMITMITMIT
СоздательRyan Dahl / OpenJS FoundationJarred Sumner / OvenRyan Dahl / Deno Land

Заключение

В 2026 году нет однозначного «лучшего» JavaScript-рантайма — есть лучший рантайм для конкретной ситуации.

Node.js остаётся безопасным выбором по умолчанию для enterprise-проектов. Его экосистема непревзойдённа, LTS-поддержка предсказуема, а рынок труда насыщен специалистами. Если у вас нет веских причин менять рантайм — Node.js по-прежнему отлично справляется со своей задачей.

Bun — лучший выбор для команд, которые ценят скорость на каждом этапе: от установки пакетов до обработки запросов. Для greenfield-проектов, serverless-функций и высоконагруженных API Bun предлагает объективно лучшую производительность. Совместимость с Node.js на уровне 95–98% делает миграцию реалистичной для большинства проектов.

Deno — выбор для тех, кто ставит безопасность и чистоту архитектуры выше всего. Модель разрешений, встроенный аудит зависимостей и следование веб-стандартам делают Deno идеальным для security-critical приложений и TypeScript-first команд.

Прагматичная рекомендация: попробуйте Bun для следующего нового проекта — скорость разработки ощущается с первой минуты. Если безопасность критична — выбирайте Deno. А Node.js никуда не денется: он продолжит развиваться и остаётся фундаментом JavaScript-экосистемы.

Источники

  1. Bun vs Deno vs Node.js in 2026: Benchmarks, Code, and Real Numbers — DEV Community
  2. Deno 2 vs Node.js vs Bun in 2026: The Complete JavaScript Runtime Comparison — DEV Community
  3. Node.js vs Deno vs Bun: Comparing JavaScript Runtimes — Better Stack
  4. Node vs Bun vs Deno: What Actually Runs in Production (2026 Guide) — JavaScript in Plain English
  5. Deno 2.6: dx is the new npx — Deno Blog
  6. Node.js 24 Becomes LTS: What You Need to Know — NodeSource
  7. Bun 1.3 Release Blog — Bun Official
  8. A Comprehensive Study of Security Risks in Deno and its Ecosystem — NDSS 2025

Похожие статьи

← Все статьи