← Все статьи

JavaScript на бэкенде: цена «одного языка на весь стек»

Производительность Node.js vs Go/Rust, память на idle, npm и когда моноязык оправдан.

Содержание

Коротко

«Один язык на фронт и бэк» звучит убедительно, но у production Node.js есть счёт: пропускная способность, память и экосистема npm. На Dev.to разобрали «налог full-stack» на цифрах.

Что произошло

Автор сравнивает ожидания 2026 года с тем, для чего JavaScript появился в 1995 году. В бенчмарках (по материалу): Express порядка 20k RPS, Go ~40k, Rust ~60k; на AWS Lambda средняя задержка Node ~20 ms против ~1.1 ms у Rust для той же работы.

Память в простое: Node 30–50 MB, Go 5–10 MB, Rust 1–2 MB — при масштабе это превращается в счёт за инстансы и cold start.

Отдельно — безопасность: огромный реестр npm, пакеты с полным доступом к процессу, регулярные инциденты supply chain.

Почему важно

Моноязык снижает трение в маленькой команде: общие типы, один найм, меньше контекст-свитчинга. Но для CPU-bound задач, жёстких SLA и минимального footprint вы платите не «сложностью второго языка», а ресурсами и рисками.

Node остаётся сильным выбором для I/O-bound API, стриминга, BFF и прототипов — там event loop и экосистема окупаются.

На практике

  • Нагрузочное тестирование на ваших эндпоинтах, не только «RPS в статье».
  • Вынос CPU-heavy в воркеры, очереди или отдельный сервис на Go/Rust.
  • Жёсткий lockfile, аудит зависимостей, минимум прав у runtime.
  • Если API публичный и контракты стабильны — схема (OpenAPI/Protobuf) важнее «всё на TS».

Итог

JavaScript на бэкенде — не ошибка, а trade-off. Осознанный стек: Node там, где выигрыш в скорости разработки; системный язык там, где счёт идёт за миллисекунды и мегабайты.