Содержание
Коротко
«Один язык на фронт и бэк» звучит убедительно, но у 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 там, где выигрыш в скорости разработки; системный язык там, где счёт идёт за миллисекунды и мегабайты.