Как сократить время установки пакетов с 28 минут до 47 секунд с помощью Bun
2026년 5월 8일
0
Computing/SoftwareComments (0)
Log in to leave a comment
No posts yet
Log in to leave a comment
No posts yet
Когда в среде Node.js вы боретесь с горой зависимостей, часто становится непонятно: то ли вы пишете код, то ли просто наблюдаете за индикатором установки. Bun — это не просто быстрый рантайм; он создает отличную базу для совместной работы с ИИ-агентами. Давайте поговорим о практических методах миграции и проектировании архитектуры, которые стоят за этой поверхностной причиной в виде скорости.
Bun был переписан с нуля на языке Zig. Благодаря этому установка пакетов происходит на порядок быстрее, чем в Node.js v22. Однако, если вы попытаетесь использовать Bun, оставив существующий package-lock.json, локфайлы запутаются, и на серверах развертывания начнется настоящий хаос. В такой ситуации не стоит пытаться совмещать их — нужно перестроить все заново.
Для начала решительно удалите node_modules и старый локфайл. Затем выполните в терминале команду bun install --frozen-lockfile, и будет создан bun.lockb — собственный бинарный локфайл Bun. Для библиотек вроде bcrypt, которые используют аддоны на C++ и выдают ошибки компиляции, для душевного спокойствия лучше перейти на bcryptjs или использовать встроенный API Bun — bun:sqlite. Опыт сокращения времени работы с 28 минут до 47 секунд в проекте с более чем 1800 зависимостями — это довольно захватывающее чувство.
Если скормить ИИ-агенту на базе LLM файл в несколько тысяч строк, он быстро потеряется и начнет нести чепуху. В Bun операции ввода-вывода (I/O) настолько быстры, что разделение файлов на очень мелкие части практически не снижает производительность. Чтобы повысить точность при редактировании кода агентом, выгодно поддерживать структуру, в которой на один файл приходится не более 100 строк.
Я создаю в проекте папки вроде src/agents и src/tools, чтобы полностью разделить функционал. Затем, связывая Bun.serve и Bun.file, я строю шлюз, который позволяет взаимодействовать только с определенными директориями. Проверка пути через targetPath.startsWith предотвращает инциденты, когда агент может залезть в системные настройки моего MacBook. Такая структура обеспечивает безопасность и экономит затраты на токены.
Если ИИ-агент вызывает инструмент, а ответ приходит спустя вечность, пользовательский опыт будет испорчен. Express при поиске маршрутов перебирает их по порядку, что замедляет работу при большом количестве запросов. Hono, напротив, использует алгоритм Trie (префиксное дерево), что позволяет мгновенно находить нужный путь.
На практике связка Bun и Hono позволяет достичь пропускной способности около 41 800 запросов в секунду (RPS). Это более чем в 3 раза быстрее, чем Express. Начните с bun add hono и считывайте переменные окружения напрямую через Bun.env. Если добавить к этому высокопроизводительный WebSocket API от Bun, можно удерживать задержку ответа в реальном времени на уровне 27 мс. Вам больше не придется наблюдать, как ИИ тупит в ожидании медленного сервера.
Проблема не решится, если только вы один будете использовать Bun. Чтобы избежать сбоев в продакшене, вся команда должна работать в одинаковой среде. Разместите файл .bunfig.toml в корне проекта и зафиксируйте в нем данные приватных реестров или опции локфайла. Это сократит время, которое новые члены команды тратят на пустые хлопоты.
При развертывании стоит уделить внимание размеру Docker-образа. Используйте образ oven/bun:1 в качестве базового, но воспользуйтесь опцией bun build --compile, чтобы превратить исходный код в единый исполняемый файл. Если извлечь только этот файл и поместить его в distroless образ, размер образа Node.js, который превышал 1 ГБ, сократится до менее чем 200 МБ. Уменьшение объема образа снижает затраты на облачную инфраструктуру примерно на 40%, так что нет причин этого не делать.