Вы тоже хоть раз ловили себя на мысли: «А может, ну его, этот Node.js — перепишем всё на Rust, и будет летать?»
Поздравляю — вы не одиноки. Я тоже через это прошёл.

В этой статье я разложу по полочкам, когда действительно стоит лезть в Rust, а когда лучше остаться на TypeScript и просто выспаться. Без фанатизма, маркетинга и с примерами из практики.


Зачем вообще думать о переписывании

Переписывать код ради хайпа — худшее, что можно сделать с живым продуктом. Но иногда ситуация доходит до того, что без хирургии никак:

  • Латентность скачет как курс крипты. p99 вылезает за все рамки, а пользователи жалуются на тормоза.

  • CPU кипит, как чайник. Оптимизировали всё, что можно, а сервис всё равно жрёт ресурсы.

  • GC устраивает вечеринку на проде. Временами всё просто замирает.

  • Безопасность. Сервисы, работающие с низкоуровневыми данными (шифрование, парсинг, форматы).

Если ничего из этого нет — расслабьтесь. TypeScript вам подходит идеально.


Что хорошего в TypeScript

TypeScript — это комфорт, гибкость и скорость.
Куча библиотек, отличная экосистема, быстрая разработка, всё ясно и прозрачно.

Он идеален, когда:

  • сервис I/O-bound (много запросов, мало вычислений);

  • важна скорость изменения бизнес-логики;

  • команда большая и разноуровневая.

Вывод: если узкое место не в CPU — оставайтесь на TS. Там, где важнее бизнес, чем наносекунды, Rust просто не окупится.


Зачем вообще Rust?

Rust — как спорткар: быстрее, надёжнее, безопаснее, но требовательный к водителю.

Что он реально даёт:

  • Скорость. Никакого GC, минимум абстракций, всё чётко.

  • Память. Контроль, предсказуемость, никаких утечек.

  • Параллелизм. Tokio и async дают гибкость без боли.

  • Безопасность. Borrow checker — не враг, а телохранитель.

Но давайте честно: разработка в Rust медленнее, найм дороже, а ментальное усилие — выше. Это не язык «для всех».


Где выигрыши настоящие, а не иллюзорные

Сценарий

Что даёт Rust

Реальный прирост

CPU-bound вычисления

Нет интерпретации JS

x2–x10

Работа с памятью / GC

Предсказуемость

-50–70% латентности на p99

Безопасность (crypto, parser)

Нет UB / утечек

💎 priceless

I/O-bound API

Почти без разницы

±0%

Не путайте «производительность» с «ощущением контроля». Иногда просто измерения дают больший прирост, чем Rust.


Как подойти без боли (и увольнений)

Полный «big rewrite» — это билет в ад. Рабочие проекты так не делают.

Вот проверенные пути:

🔹 1. Вынести горячий кусок

Нашли bottleneck — вынесите в отдельный микросервис на Rust.
gRPC, HTTP, хоть сокеты — не важно. Так безопаснее всего.

🔹 2. N-API / napi-rs / Neon

Маленький CPU-модуль можно собрать в native addon.
Node.js остаётся обвязкой, Rust делает тяжёлую работу.

#[napi]
fn sum(a: i32, b: i32) -> i32 {
  a + b
}

И вызывать это из TypeScript как обычную функцию. Красота.

🔹 3. WebAssembly

Отличный вариант, если у вас edge-сервисы, Cloudflare Workers, или нужен общий код между backend и frontend.

🔹 4. Полная переписка

Только если код уже нельзя поддерживать, и переписка дешевле латания.
(спойлер: это редкость).


Пример для наглядности

Вот тот самый «учебный» пример с Fibonacci.

TypeScript:

function fib(n: number): number {
  return n < 2 ? n : fib(n - 1) + fib(n - 2);
}

Rust:

fn fib(n: u32) -> u64 {
  match n {
    0 => 0, 1 => 1, n => fib(n - 1) + fib(n - 2)
  }
}

На небольших n — одинаково. На больших — Rust уходит вперёд, как болид на прямой. Но кто в продакшене вообще считает Fibonacci без кеша?..


Как понять, что Rust действительно помог

Без метрик — всё гадание на кофейной гуще.

Проверяйте:

  • p50 / p95 / p99 latency

  • CPU load

  • память

  • RPS на инстанс

  • стоимость облака

Смотрите не только на скорость, но и на стабильность хвостов. Rust часто даёт не столько прирост, сколько предсказуемость.


Чеклист: стоит ли вам вообще туда лезть

Отметьте галочками:

☐ У вас CPU-bound сервис
☐ Проблемы с GC или памятью
☐ p99 тормозит и влияет на бизнес
☐ Есть в команде Rust-разработчики (или желание стать ими)
☐ Хотите снизить расходы на инфраструктуру

Если набралось 3+ — сделайте прототип в Rust.
Если нет — закройте вкладку и займитесь профилированием на Node.


И немного философии напоследок

Rust — не серебряная пуля. Это инструмент, который даёт мощь и контроль, но требует зрелости и дисциплины.

TypeScript — это про скорость и бизнес. Rust — про контроль и эффективность.

Главное — не язык. Главное — понимание, где узкое место, и зачем вы его меняете.
Измеряйте, прототипируйте, проверяйте гипотезы.
Тогда ваша команда будет не просто писать код, а принимать инженерные решения.


🦀 Итог: не переписывайте всё — перепишите только то, что действительно тормозит.
Rust — как хороший нож: в умелых руках он режет отлично, в неумелых — просто оставляет шрамы.