lenec ru

← все посты

Deno 2.0 vs Node.js vs Bun: выбираем JavaScript-рантайм в 2026

10K

В 2026 году у JavaScript-разработчика три рантайма на выбор: проверенный Node.js, амбициозный Deno 2.0 и скоростной Bun. Каждый решает свои проблемы и имеет свои компромиссы. Разбираемся, что нового в каждом, сравниваем бенчмарки и определяем, когда какой рантайм выбрать.

Deno 2.0: npm-совместимость и permissions

Deno 2.0 решил главную проблему первой версии — несовместимость с npm-экосистемой. Теперь npm-пакеты работают из коробки:

// deno.json — конфигурация проекта
{
  "imports": {
    "express": "npm:express@4",
    "zod": "npm:zod@3"
  },
  "tasks": {
    "dev": "deno run --watch --allow-net main.ts",
    "test": "deno test"
  }
}

// main.ts — обычный Express-сервер
import express from "express";

const app = express();
app.get("/", (req, res) => res.json({ runtime: "deno" }));
app.listen(3000);

Ключевые фичи Deno 2.0:

  • npm-совместимость — npm: спецификатор, package.json поддерживается, node_modules опционально.
  • Permissions — гранулярный контроль: --allow-net, --allow-read, --allow-env. Скрипт не получит доступ к файловой системе без явного разрешения.
  • Встроенный тулинг — formatter, linter, test runner, LSP, task runner — всё из коробки.
  • TypeScript без конфигурации — .ts файлы выполняются напрямую.

Bun: скорость как главная фича

Bun написан на Zig с использованием JavaScriptCore (движок Safari) вместо V8. Результат — рекордная скорость запуска и выполнения:

// bunfig.toml — конфигурация
[install]
cache = true

// server.ts — встроенный HTTP-сервер
Bun.serve({
  port: 3000,
  fetch(req) {
    return new Response(JSON.stringify({ runtime: "bun" }), {
      headers: { "Content-Type": "application/json" },
    });
  },
});

// Встроенный SQLite
import { Database } from "bun:sqlite";
const db = new Database("app.db");
db.run("CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT)");

// Встроенные тесты
import { test, expect } from "bun:test";
test("2 + 2", () => expect(2 + 2).toBe(4));

Что даёт Bun:

  • Скорость запуска — в 4-5x быстрее Node.js. Критично для CLI, serverless, скриптов.
  • Встроенный bundler — замена esbuild/webpack для простых случаев.
  • bun install — установка пакетов в 10-25x быстрее npm.
  • Встроенный SQLite, тесты, .env — меньше зависимостей.

Node.js 22: эволюция без революции

Node.js не стоит на месте. Ключевые изменения в версиях 22-23:

// require() теперь работает с ESM-модулями
const { z } = require("zod"); // ESM-пакет через require — работает!

// Type stripping — .ts файлы без компиляции (экспериментально)
// node --experimental-strip-types app.ts

// Permission model (экспериментально)
// node --experimental-permission --allow-fs-read=/app app.js

// Встроенный watch mode
// node --watch app.js

// Встроенный test runner (стабильный)
import { test } from "node:test";
import assert from "node:assert";

test("сложение", () => {
  assert.strictEqual(2 + 2, 4);
});

Node.js движется в сторону Deno/Bun: TypeScript-поддержка, permissions, встроенные тесты. Но делает это постепенно и с обратной совместимостью.

Бенчмарки: HTTP, startup, install

Метрика              | Node.js 22 | Deno 2.0  | Bun 1.2
─────────────────────────────────────────────────────────
HTTP RPS (hello)     | 95K        | 110K      | 160K
Startup time         | 35ms       | 25ms      | 7ms
Install (1000 deps)  | 28s        | 18s       | 3s
Bundle (React app)   | esbuild 0.8s| —        | 0.6s
TypeScript exec      | tsx: 180ms | native 25ms| native 8ms
Memory (idle server) | 45 MB      | 38 MB     | 32 MB

Bun лидирует по скорости почти везде. Deno быстрее Node.js и предлагает лучший DX. Node.js — самый стабильный и совместимый.

Когда какой рантайм выбрать

Node.js — выбор по умолчанию для продакшена:

  • Максимальная совместимость с npm-экосистемой.
  • Все библиотеки протестированы на Node.js.
  • Зрелый APM, мониторинг, debugging.
  • Огромное сообщество и рынок труда.

Deno 2.0 — для новых проектов с фокусом на безопасность:

  • Permissions по умолчанию — безопаснее для серверов.
  • TypeScript из коробки без tsconfig/tsx.
  • Deno Deploy — serverless-платформа с edge-рантаймом.
  • Хорош для API-серверов, CLI-утилит, скриптов.

Bun — для скорости и developer experience:

  • Serverless/edge — startup time критичен.
  • Монорепо — bun install экономит минуты в CI.
  • CLI-утилиты — мгновенный запуск.
  • Осторожно в продакшене: моложе, меньше battle-tested.

Вывод

В 2026 году все три рантайма жизнеспособны. Node.js остаётся safe choice для enterprise. Deno 2.0 — лучший DX с npm-совместимостью. Bun — рекорды скорости, но моложе. Хорошая новость: код на TypeScript переносится между ними с минимальными изменениями. Выбирайте под задачу, а не по хайпу.

Комментарии 0

  • Будьте первым, кто оставит комментарий.

Войдите, чтобы оставить комментарий.