Bun, Deno, Node.js в 2026 — война рантаймов и что из неё вышло

Bun, Deno, Node.js в 2026 — война рантаймов и что из неё вышло

Пятнадцать лет Node.js был единственным серьёзным вариантом для server-side JavaScript. Потом появился Deno — амбициозный, переписанный с нуля. Потом Bun — быстрый до неприличия. К 2026 году все три рантайма достигли зрелости и активно используются в продакшне. Пора разобраться что из них выбрать — без маркетинговых историй.

Архитектура: почему они разные

Понять разницу в производительности проще через движок:

  • Node.js — Google V8, написан на C++, долгое время единственный вариант
  • Deno — тот же V8, но написан на Rust. Создан Райаном Далем — тем же кто придумал Node.js
  • Bun — Apple JavaScriptCore (движок Safari), написан на Zig

Ключевое различие: V8 оптимизирован под долгие процессы с warm-up периодом и достигает пика после разогрева. JavaScriptCore оптимизирован под быстрый старт — именно здесь корень преимущества Bun в холодных стартах и бенчмарках.

Что говорят бенчмарки — и почему они врут

Синтетические тесты HTTP-сервера показывают:

  • Bun: ~52 000 req/s
  • Deno: ~29 000 req/s
  • Node.js: ~14 000 req/s

Выглядит впечатляюще. Но реальные приложения работают иначе.

Когда в тест добавляются маршрутизация, JWT-верификация, запросы к базе данных и бизнес-логика — все три рантайма выходят примерно на ~12 000 RPS. Разрыв почти исчезает. Причина проста: большую часть времени приложение ждёт ответа от базы или внешнего API, а не занимается вычислениями на движке.

Где разрыв остаётся реальным — холодные старты:

  • Bun: 8–15 ms
  • Deno: 40–60 ms
  • Node.js: 60–120 ms

Для serverless-функций это конвертируется в деньги. На AWS Lambda Bun в среднем даёт 156 ms против 245 ms у Node.js — разница в 35% напрямую влияет на биллинг.

Ещё одна область где Bun выигрывает однозначно — установка пакетов. Монорепа которая ставится npm за 30 минут, с Bun займёт под 5.

Node.js: скучный, надёжный, всё ещё лучший для энтерпрайза

Node.js 22 ускорил холодный старт на 30% по сравнению с 20-й версией и добавил экспериментальную поддержку TypeScript напрямую:

node --experimental-strip-types src/index.ts

С ограничениями — enum, namespace и специфичные фичи TypeScript не поддерживаются. Но для базовых случаев работает.

Экосистема Node.js — 2+ миллиона npm-пакетов, нативная поддержка AWS/Azure/GCP, зрелый мониторинг через New Relic и Datadog. Если у тебя финансовое приложение или healthcare-сервис, где downtime стоит миллионы — Node.js.

Deno 2: самый безопасный и типизированный

Главное что изменилось в Deno 2 — полная npm-совместимость. Теперь не нужно переписывать зависимости, package.json работает нативно.

Но главное преимущество Deno — permission model:

# Явное указание что разрешено
deno run --allow-net=localhost:3000 --allow-read=. server.ts

Скомпрометированный npm-пакет не может слить данные без --allow-net. Node.js и Bun доверяют всему коду полностью. Для security-critical приложений это принципиальная разница.

TypeScript работает из коробки без конфигурации. REPL поддерживает TypeScript. Встроенный форматтер и линтер. Deno — самый «батарейки в комплекте» из трёх.

Bun 1.3: самый быстрый и всё менее экспериментальный

Bun 1.3 добавил несколько вещей которые убивают потребность во внешних зависимостях:

# Zero-config фронтенд — никакого Vite, никаких конфигов
bun index.html
 
# Встроенные клиенты без внешних пакетов
import { Database } from 'bun:sqlite'
import { RedisClient } from 'bun'

Встроенные MySQL, PostgreSQL, SQLite и Redis клиенты — это серьёзно. Для нового проекта это убирает несколько зависимостей сразу.

Bun спроектирован как drop-in замена Node.js — большинство npm-пакетов работают без изменений. Кейсы где ломается: native C++ addons и некоторые специфичные поведения Node streams.

Важный контекст: в конце 2026 года Anthropic приобрела Bun — первое M&A-событие для компании. Bun уже глубоко интегрирован в Claude Code. Это сигнал о том в каком направлении движется экосистема.

Как выбрать

Node.js — если стабильность критична, команда знакома с экосистемой, и проект уже существует. Не меняй то что работает.

Deno — если TypeScript-first с первого дня, security important, и готов к чуть меньшей экосистеме.

Bun — если новый проект, скорость инструментов важна, и готов к тому что иногда будут шероховатости. Сайдпроекты, стартапы, внутренние инструменты.

Код всё более портабелен между рантаймами. API сближаются. Страх «выбрать не то» в 2026 году — преувеличен.

5

19.03.2026

|

byteiota.com
2026