Архитектура фронтенда
Пайплайны сборки: аудит и упрочнение реальной сборки
Читать про tree-shaking и dev/prod-паритет — не то же самое, что вырезать регрессию в 200 KB из реального бандла и доказать, что она не вернулась. Возьми реальное приложение, измерь его сборку, найди утечки, почини их на правильной стадии и подкрепи каждое утверждение числом.
Преврати ментальную модель юнита в воспроизводимый инженерный цикл: проанализируй бандл, найди утечки tree-shaking и чанкинга, почини их на правильной стадии пайплайна, закрой один разрыв dev/prod-паритета и подтверди измерениями до/после — не оценками.
Возьми реальное фронтенд-приложение (своё или стартер, который ты соберёшь с намеренно CommonJS-тяжёлой зависимостью) и упрочни его сборку: сократи production-бандл, устранив регрессию tree-shaking, стабилизируй кэш разбиением vendor, закрой один разрыв dev/prod-паритета и докажи каждый фикс числами до/после.
- Таблица до/после: всего байт бандла, размеры vendor vs app чанков, время холодной vs тёплой сборки и вклад регрессии tree-shaking — всё измерено из analyzer и вывода сборки, не оценено.
- Treemap-ы analyzer до и после ясно показывают, что CommonJS-регрессия ушла, а vendor изолирован в свой чанк.
- Доказательство стабильности кэша: две подряд сборки с изменением только в коде приложения, показывающие неизменное имя (хэш) vendor-чанка в обеих.
- Лог прогона CI, показывающий, что smoke-тест production-сборки ловит баг паритета, а затем проходит после фикса.
- Абзац-описание, называющий, какую стадию пайплайна целил каждый фикс (resolve/transform/bundle/minify/emit) и почему это была верная стадия.
- Добавь в CI гейт бюджета размера бандла (size-limit или performance budget bundler-а), который роняет сборку, если любой чанк вырастает за порог, и продемонстрируй, как он ловит повторно введённую регрессию.
- Перенеси стадию transform с Babel на esbuild или SWC и зафиксируй дельту времени transform на холодной сборке, изолировав её от стадии bundle.
- Добавь вторую цель сборки (modern + legacy через differential output) и сравни размер modern-бандла с пониженным, показав цену поддержки старых браузеров.
- Напиши одностраничный runbook сборки: как читать treemap, чеклист провалов tree-shaking (CJS / sideEffects / понижение), правило кэширования vendor-чанка и гейт верификации dev/prod.
Это цикл, который ты гоняешь на каждой реальной сборке: сначала анализируй treemap-ом, найди утечку (CommonJS-импорт, слишком широкий флаг sideEffects, vendor, делящий чанк с кодом приложения), почини её на правильной стадии (resolve, transform, bundle или emit), закрой разрыв dev/prod гейтом CI на реальной production-сборке и подтверди числами до/после в одних условиях. Сделав это раз на реальном приложении, превращаешь production-версию в мышечную память.