Автоматический контроль размера бандла в CI/CD: настройка и оптимизация

Бандл растёт незаметно — мы помогаем это контролировать

Разработка и обслуживание любых видов сайтов:

Информационные сайты или веб-приложения
Сайты визитки, landing page, корпоративные сайты, онлайн каталоги, квиз, промо-сайты, блоги, новостные ресурсы, информационные порталы, форумы, агрегаторы
Сайты или веб-приложения электронной коммерции
Интернет-магазины, B2B-порталы, маркетплейсы, онлайн-обменники, кэшбэк-сайты, биржи, дропшиппинг-платформы, парсеры товаров
Веб-приложения для управления бизнес-процессами
CRM-системы, ERP-системы, корпоративные порталы, системы управления производством, парсеры информации
Сайты или веб-приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, конструкторы сайтов, порталы предоставления электронных услуг, видеохостинги, тематические порталы

Это лишь некоторые из технических типов сайтов, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента

Услуги, которые мы предлагаем
Показано 1 из 1Все 2062 услуг
Автоматический контроль размера бандла в CI/CD: настройка и оптимизация
Простой
от 1 дня до 3 дней

Наши компетенции:

Часто задаваемые вопросы

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1419
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1287
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    983
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1244
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    983
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Разработка веб-сайта для компании ФИКСПЕР
    998

Бандл растёт незаметно — мы помогаем это контролировать

Вы добавили одну зависимость, коллега импортировал утилиту целиком — и через месяц JS-бандл потяжелел на 200 КБ. LCP просел на 30%, а виновник не найден. В 80% проектов разработчики замечают проблему только после деплоя в прод. Автоматическая проверка размера бандла в CI/CD останавливает деградацию до попадания в релиз. Наши инженеры с опытом 5+ лет настраивают такой контроль под ваш стек. Первичная консультация — бесплатно. Свяжитесь для аудита бандла.

Какие проблемы решаем

  • Невидимый рост бандла — каждая новая зависимость увеличивает размер, но в PR этого не видно, пока LCP не вырастет на 30%. Например, импорт lodash целиком вместо lodash.get добавляет 20 КБ в gzip.
  • Дублирование кода — одна и та же библиотека в разных чанках после code splitting, что увеличивает общий размер на 10-15%.
  • Раздутие initial bundle — lazy-загрузка не настроена, и пользователь качает всё сразу, увеличивая TTI на 2 секунды.
  • Отсутствие baseline — без истории изменений сложно отследить, какая версия внесла регрессию.

Как это работает

На каждый PR или деплой собираем бандл, сравниваем его размер и размер отдельных чанков с baseline — значениями из предыдущего деплоя или фиксированными лимитами. Если порог превышен — CI падает или оставляет предупреждение в PR. Это позволяет экономить до 500$ в месяц на поддержке производительности.

Инструменты делятся на два класса:

Инструмент Подход Когда использовать
bundlesize / bundlewatch Сравнение с фиксированными лимитами Простые проекты, быстрая настройка
size-limit (NEAR Protocol) Лимиты + анализ импортов JS-библиотеки, пакеты npm
Webpack Bundle Analyzer Визуализация, без CI-блокировки Ручной аудит
Vite rollup-plugin-visualizer То же для Vite Ручной аудит
Relative CI / BuildBuddy Сравнение PR vs base branch Командные проекты, богатый UI

Как bundlewatch помогает контролировать размер бандла?

Устанавливаем:

npm install --save-dev bundlewatch 

Конфигурация в package.json:

{ "bundlewatch": { "files": [ { "path": "dist/assets/index-*.js", "maxSize": "150kB" }, { "path": "dist/assets/vendor-*.js", "maxSize": "400kB" }, { "path": "dist/assets/*.css", "maxSize": "50kB" } ], "ci": { "trackBranches": ["main", "master"], "repoBranchBase": "main" } } } 

В GitHub Actions:

name: Bundle Size Check on: [pull_request] jobs: bundlewatch: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: 20 cache: npm - run: npm ci - run: npm run build - run: npx bundlewatch env: BUNDLEWATCH_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} CI_REPO_OWNER: ${{ github.repository_owner }} CI_REPO_NAME: ${{ github.event.repository.name }} CI_COMMIT_SHA: ${{ github.event.pull_request.head.sha }} CI_BRANCH: ${{ github.head_ref }} CI_BRANCH_BASE: ${{ github.base_ref }} 

bundlewatch оставляет комментарий в PR с таблицей: текущий размер, delta, статус. Подробнее в bundlewatch.

Настройка size-limit: глубже, чем просто лимиты

size-limit анализирует дерево импортов: показывает вес модуля с учётом tree-shaking и gzip.

npm install --save-dev size-limit @size-limit/preset-app 

.size-limit.json:

[ { "path": "dist/assets/index-*.js", "limit": "150 kB", "gzip": true }, { "name": "Vendor chunk", "path": "dist/assets/vendor-*.js", "limit": "380 kB", "gzip": true } ] 

В package.json:

{ "scripts": { "size": "size-limit", "analyze": "size-limit --why" } } 

--why запускает webpack-bundle-analyzer и показывает, что именно тянет размер.

Почему относительные лимиты удобнее абсолютных?

Абсолютные лимиты устаревают — проект растёт, и постоянно поднимать цифры надоедает. Альтернатива: проверять delta относительно base branch. Мы используем скрипт, который сравнивает размер текущей ветки с базовой. Скрипт выполняет сборку, сохраняет текущий размер, загружает размер базовой ветки из артефактов CI и вычисляет дельту. Если дельта превышает 10%, CI падает. Такой подход экономит время на настройку и не требует ручного обновления лимитов.

Что проверять помимо общего размера

  • Количество чанков — рост числа чанков при code splitting может увеличить количество HTTP-запросов.
  • Размер initial bundle отдельно от lazy-loaded чанков — именно он влияет на LCP и TTI.
  • Дубли зависимостей — когда одна библиотека затягивается в несколько чанков в разных версиях. Для анализа: npm ls <package> или npx duplicate-package-checker-webpack-plugin.

Сравнение подходов: bundlewatch vs size-limit

Параметр bundlewatch size-limit
Сложность настройки Низкая (5 минут) Средняя (конфиг JSON)
Тип лимитов Абсолютные Абсолютные + относительные
Анализ импортов Нет Да (tree-shaking)
Уведомления в PR Комментарий с таблицей Комментарий + флажок
Рекомендация Быстрый старт Глубокий контроль

Типичные ошибки и как их избежать

Некоторые команды забывают настроить кеширование, и проверка занимает 5+ минут. Мы используем кеширование node_modules и .vite, сокращая время до 40–60 секунд. Другая ошибка — устанавливают лимиты «на глаз». Правильно: замерить текущие размеры и задать с запасом 10–15%.

Что входит в работу

  • Аудит текущего бандла и выявление проблемных мест.
  • Настройка выбранного инструмента (bundlewatch или size-limit) с индивидуальными лимитами.
  • Интеграция в CI/CD (GitHub Actions, GitLab CI, Bitbucket Pipelines).
  • Документирование конфигурации и процесса поддержки.
  • Обучение команды работе с уведомлениями и анализом.
  • Пост-релизная поддержка в течение 1 месяца.

Сроки ориентировочно

Базовая настройка bundlewatch в существующий CI-пайплайн — от 4 до 8 часов. Настройка size-limit с анализом и уведомлениями в PR — от 1 до 2 рабочих дней. Стоимость рассчитывается индивидуально после оценки вашего проекта. Получите консультацию — мы расскажем, какой вариант оптимален. Закажите аудит бандла, и мы предложим конкретные решения.