esbuild · SWC · Monorepo · Удалённый Mac · 2026

2026: сборка фронтенда на удалённом Mac —
esbuild и SWC в monorepo: параллельные воркеры, cacheDir, NODE_OPTIONS и инкремент

11.04.2026 Фронтенд / Сборка 7 мин чтения

Для кого: команды на pnpm/npm workspaces, где Vite, Next.js или скрипты одновременно дергают esbuild и SWC. На арендованном удалённом Mac легко получить конкуренцию за CPU, разъехавшиеся кэши и OOM в Node, если не согласовать воркеры и каталоги. Ниже — матрица по GOMAXPROCS, числу воркеров, cacheDir, NODE_OPTIONS и инкрементальным режимам, плюс исполняемая приёмка. Связка с фронтенд-материалами: Intersection Observer и скелетоны, раздел блога о фронтенде; без обязательного входа — главная и покупка. Дополнительно: Rspack, esbuild и кэш на remote Mac.

01 Почему monorepo «ломается» на удалённом Mac

Apple Silicon быстр, но два нативных компилятора плюс Node всё равно могут перегрузить ядра, продублировать работу и сбросить тёплый кэш, если каждый пакет поднимает свой пул потоков.

  1. Двойной параллелизм: esbuild на Go, SWC на Rust — оба по умолчанию широкие и не знают о лимитах друг друга.
  2. Дрейф путей кэша: CI копирует node_modules, но забывает .turbo, .swc или метаданные Vite без единого правила cacheDir.
  3. Давление на кучу Node: типо-осознанные плагины и source map остаются в Node; неверный NODE_OPTIONS маскирует OOM до пиков нагрузки.

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

02 Таблица: esbuild, SWC и оркестратор monorepo

Используйте таблицу как черновик, когда два конвейера собираются на одном хосте; точные флаги задаёт обёртка бандлера.

Слой GOMAXPROCS / воркеры cacheDir NODE_OPTIONS (куча) Инкремент
esbuild (Go) GOMAXPROCS близко к числу физических ядер минус один на общем Mac; ограничьте параллелизм бандлера, чтобы потоки Node не наслаивались. Бинарник stateless; сохраняйте обёрточные кэши вроде node_modules/.cache/esbuild или .cache/build. Не для Go-бинарника; размер кучи — для плагинов Node рядом. Инкремент через API или кэш бандлера, не одним глобальным флагом CLI.
SWC (Rust) RAYON_NUM_THREADS по зарезервированным vCPU; лимитируйте задачи Next/Turbo ниже потоков хоста. Держите .swc и .next/cache на локальном SSD; при необходимости — симлинк в воркспейс. Добавьте кучу, если рядом TS-программа или плагины: например NODE_OPTIONS=--max-old-space-size=8192 после замеров RSS. Кэш AST на диске; включайте инкремент фреймворка и не сотрите кэш между тёплыми прогонами, если не тестируете холодный старт.
Оркестратор (Turbo, Nx, Rush) Сведите --parallel с GOMAXPROCS и потоками SWC; оставьте одно ядро под sshd и I/O. Направьте TURBO_CACHE_DIR или NX_CACHE_DIRECTORY в один путь; отключите агрессивные очистители. Задайте NODE_OPTIONS один раз в CI, чтобы вложенные скрипты делили один потолок кучи. Удалённый кэш — после того как локальный инкремент стабилен; хиты не должны скрывать битую конфигурацию.

03 Пять шагов настройки перед бенчмарком

  1. Перечислите бинарники, которые трогают TypeScript/JSX, и отметьте esbuild, SWC или оба.
  2. Выберите один корень кэша на раннер, экспортируйте в профиль и архивируйте в CI.
  3. Согласуйте GOMAXPROCS, RAYON_NUM_THREADS и сумму задач оркестратора с зарезервированными ядрами.
  4. На удалённом Mac снимите холодный прогон с чистыми кэшами, затем тёплый повтор в пределах десяти минут.
  5. Зафиксируйте wall time, пик RSS и дисковые записи; приложите графики к pull request.

Дополнительно один раз выполните sysctl hw.ncpu и vm_stat — в тикетах будет контекст железа.

04 Цифры, которые можно вставить в тикет

Стартовые ориентиры для Apple Silicon
  • Кучу Node начинайте около 8 ГБ для крупных дизайн-систем; ужимайте после профилирования.
  • Одно ядро оставьте под рабочий стол, синхронизацию и антивирус — вычитайте до лимитов потоков.
  • Тёплый инкрементальный прогон на NVMe часто сокращает wall time на 30–60% относительно холодного.

05 Приёмка на удалённом Mac (чек-лист)

  1. Паритет SSH: два шелла, env | sort, одинаковые GOMAXPROCS, RAYON_NUM_THREADS, NODE_OPTIONS до сравнения веток.
  2. Доказательство кэша: тёплый прогон показывает рост байт в cacheDir и попадания оркестратора; провал, если всегда холодный старт.
  3. Конкуренция: запустите тесты параллельно со сборкой; wall time остаётся в опубликованном бюджете.
  4. Диск: df -h; если кэши съедают свободное место >20%, подрежьте ветки, а не рабочие кэши без причины.
  5. Заметка к релизу: вставьте строку матрицы и холодные/тёплые тайминги для следующего инженера.

Если пики не сходятся, арендуйте выделенный удалённый Mac с изолированным CPU и быстрым NVMe — очереди к ядрам исчезнут, кэши дольше остаются тёплыми.

06 FAQ

Увеличение GOMAXPROCS всегда ускоряет esbuild?

Нет: за пределами физических ядер растёт только стоимость переключения контекста.

Должны ли SWC и esbuild делить один cacheDir?

Внутренности кэша раздельны, но родительский том для бэкапов и CI лучше один.

Безопасен ли инкремент на общих remote Mac?

Да при изолированных путях; полная очистка — при смене toolchain, а не при каждом прогоне.

Удалённый Mac · Скорость сборки

Арендуйте Mac, чтобы ускорить esbuild и SWC

Выделенный Apple Silicon снимает очереди к ядрам и держит кэши горячими. Оформите аренду удалённого Mac для CI или тяжёлых сборок: тарифы и покупка доступны без обязательного входа. Помощь по SSH и VNC, главная — с планами и регионами.

Monorepo esbuild SWC
Аренда Mac — быстрее сборка