IFonin1 час назад
Node.js → Rust: 5-10x ускорение без знания Rust
Уровень сложностиСреднийВремя на прочтение3 минОхват и читатели1.4KReactJS*Node.JS*Rust*МнениеНа своём MacBook M4 я не замечал проблем. Два скрипта на Node.js 18 собирали информацию по проекту, обходили файлы, считали строки, агрегировали данные и отрабатывали за пару секунд. Жить можно.
А потом на созвоне коллега расшарил экран. У него удалённый рабочий стол, Intel Core i5-1035G1, 8 ГБ RAM. Он запустил тот же скрипт, и мы оба смотрели на терминал восемь секунд. В тишине. Восемь секунд это много, когда ты запускаешь скрипт десять раз в день.
Я переписал оба скрипта на Rust с помощью AI-ассистента (Claude Code). Получил 5-10x ускорение. Ниже то что сработало, что нет, и стоит ли вам делать то же самое.
Контекст
Два CLI-скрипта для внутренних нужд проекта:
• Скрипт 1: рекурсивный обход директорий через glob, подсчёт строк в файлах по расширениям, вывод агрегированной статистики.
• Скрипт 2: парсинг Markdown-файлов, извлечение front matter, построение индекса контента.Оба на Node.js 18. На M4 работали незаметно. На железе коллеги тормозили ощутимо. Проект рос, файлов становилось больше, и разрыв в производительности между машинами только увеличивался.
Проблемы в коде были понятные: старый glob без оптимизации, промисы запускались последовательно вместо параллельного выполнения. Можно было исправить на Node.js. Но когда видишь, как коллега ждёт по 8 секунд на каждом запуске хочется решить проблему с запасом, а не впритык.
Почему Rust, а не оптимизация Node.js
Прагматичный ответ: скрипты делали ровно то, в чём Rust силён file traversal и CPU-bound агрегация. Это тот же класс задач, где ripgrep и fd показывают 10-20x ускорение по сравнению с системными grep/find.
Непрагматичный ответ: было интересно проверить, насколько реально использовать AI для генерации кода на незнакомом языке в production-сценарии.
Важно: я осознанно выбрал простую задачу. Два скрипта, каждый это пара сотен строк, без сложной бизнес-логики, без сетевых вызовов, без многопоточности. Идеальный кандидат для эксперимента. На сложном проекте с архитектурными решениями результат был бы другим.
Процесс
Отдал оба скрипта Claude Code с задачей переписать на Rust. Дальше произошло кое-что, что хорошо иллюстрирует, почему Rust + AI-генерация работает лучше, чем ожидаешь.
Компилятор Rust нашёл проблемы в сгенерированном коде. AI их исправил. Итеративно, без моего участия в отладке. Строгая система типов Rust создаёт tight feedback loop: ошибки конкретные, с указанием места и причины. Не размытые runtime-ошибки чёткий сигнал. Компилятор фактически выступает code reviewer для AI.
Что я делал: ревью финального кода (~20 минут). Читал, проверял логику, сравнивал с оригинальными скриптами. Код был понятный, Rust читается проще, чем пишется.
Чего я не делал: не отлаживал, не гуглил ошибки компилятора, не разбирался с lifetimes.
Распространение бинарников
Отдельная задача это как доставить Rust-бинарники в проект. Они platform-specific, хранить в git очень плохая идея.
Посмотрел на подход esbuild: npm-пакеты с platform-specific бинарниками. npm install и получаешь бинарник для своей ОС. Без исходников в репозитории, без тяжёлых файлов. Сделал так же вышло лучше чем ожидал.
Результаты
МашинаNode.js 18RustУскорениеi5-1035G1, 8 ГБ RAM~8 сек~1-1.5 сек5-7xMacBook M4~2 сек~0.3 сек~6xРезультат предсказуемый для данного класса задач (file I/O + CPU-bound обработка). Не уникальный: ccusage показал до 1000x ускорения отдельных операций после миграции с Node.js на Rust.
Где это не сработает
Честность важнее хайпа. Вот ограничения:
По задаче:
• Если узкое место сеть (API вызовы, база данных), выигрыш будет минимальный. Rust не ускорит ожидание ответа от сервера.
• Если скрипт и так быстрый (< 1 сек) овчинка не стоит выделки.
• Профилируйте перед тем, как переписывать. node --prof или просто time node script.js убедитесь, что bottleneck там, где думаете.По подходу (AI-генерация):
• Простые скрипты для меня ок. Сложная архитектура с десятками модулей, trait objects, async runtime совсем другая история.
• Я не стал Rust-разработчиком. Я могу читать этот код и вносить мелкие правки через AI. Но если понадобится серьёзный рефакторинг для меня это будет проблема. Хотя всегда можно подучиться.
• Зависимость от AI для обслуживания кода на языке, который не знаешь это технический долг. Осознанный, но долг. И не факт, что кроме тебя его вообще кто-то поймет и вообще сможет исправить.
Итого
Для конкретного класса задач (CLI-утилиты, file traversal, CPU-bound обработка) переписывание Node.js → Rust через AI-ассистента дало предсказуемый результат: 5-10x ускорение при минимальных затратах времени.
Подход работает, когда:
• Задача простая и изолированная
• Bottleneck в CPU/I/O, а не в сети
• Вы готовы к тому, что обслуживание кода будет через AIНе работает, когда:
• Сложная бизнес-логика с архитектурными решениями
• Нужно глубокое понимание экосистемы (async Rust, unsafe, FFI)
• Команда должна поддерживать код без AIОригинал статьи с дополнительными деталями:ifonin.ru/blog/nodejs-rust-claude-codeТеги:• claude code
• rust
• nodejsХабы:• ReactJS
• Node.JS
• Rust
Получайте больше инсайтов о систематизации бизнеса
Подписывайтесь на Telegram-канал Business Operations — ежедневные материалы о бизнес-процессах, операционном управлении и повышении эффективности
💬 Подписаться на канал→ Оригинальная статья