calcal.ru
Инструмент для фронтенд-разработчиков

Калькулятор размера бандла JS/CSS

Оцените итоговый размер фронтенд-сборки по npm-зависимостям. Встроенная база пакетов, бюджет бандла, рекомендации по оптимизации и сравнение gzip/brotli.

60+
Пакетов в базе
Популярные npm-зависимости с размерами
200 KB
Рекомендуемый бюджет
Оптимальный размер бандла (gzip)
~70%
Сжатие gzip
Среднее уменьшение размера JS
3 сек
Лимит LCP
Целевое значение Core Web Vitals

Что такое размер бандла

Бандл (bundle) — это итоговый файл JavaScript и CSS, который браузер загружает при открытии вашего сайта. Он формируется сборщиком (webpack, Vite, esbuild) из исходного кода и всех npm-зависимостей проекта. Чем больше бандл, тем дольше страница загружается, тем ниже оценки в Lighthouse и тем хуже пользовательский опыт, особенно на мобильных устройствах и медленных сетях.

📦

Raw (несжатый)

Размер файлов до сжатия на сервере. Этот объём JavaScript-движок браузера должен распарсить и выполнить. Большие библиотеки занимают процессорное время даже после быстрой загрузки, блокируя главный поток и увеличивая метрику TBT (Total Blocking Time).

🗜

Gzip

Стандартный алгоритм сжатия для веба. Веб-сервер (nginx, Apache) сжимает файлы на лету или заранее, а браузер распаковывает их автоматически. Gzip уменьшает JS-файлы примерно в 3-4 раза. Поддерживается всеми браузерами и серверами без исключений.

Brotli

Современный алгоритм от Google, дающий на 15-20% лучшее сжатие, чем gzip. Поддерживается всеми современными браузерами через HTTPS. Особенно эффективен для текстовых файлов (JS, CSS, HTML). Рекомендуется настроить на сервере как приоритетный алгоритм.

Почему размер бандла критически важен

Размер JavaScript напрямую влияет на Core Web Vitals, позиции в Яндексе и Google, конверсию и удержание пользователей.

🚀

LCP (Largest Contentful Paint)

Тяжёлый JS блокирует рендеринг страницы. Google считает хорошим LCP до 2.5 секунд. Каждые 100 KB JavaScript добавляют ~100-300 мс на мобильном устройстве к этой метрике.

📱

Мобильные пользователи

На 3G-сети 1 MB JavaScript загружается 10+ секунд. В России 30% мобильного трафика идёт на скоростях ниже 10 Мбит/с. Экономия каждого килобайта критична для этой аудитории.

🔍

SEO и Яндекс

Яндекс и Google учитывают скорость загрузки при ранжировании. Core Web Vitals стали фактором ранжирования с 2021 года. Медленные страницы получают меньше трафика из поиска.

💰

Конверсия и доход

По исследованиям, каждая дополнительная секунда загрузки снижает конверсию на 7%. Для e-commerce это прямые потери в выручке. Amazon подсчитал: +100 мс загрузки = -1% продаж.

🎯

Lighthouse Score

Performance Score в Lighthouse зависит от TBT (Total Blocking Time), который напрямую связан с объёмом JS. Сайты с бандлом менее 200 KB gzip стабильно получают 90+ баллов.

📊

Бюджет бандла (Bundle Budget)

Установка лимита на размер бандла — лучшая практика в командах. Webpack и Vite позволяют настроить предупреждения при превышении. Типичный бюджет: 150-250 KB gzip для всего JS.

Как уменьшить размер бандла

Практические техники оптимизации фронтенд-сборки, которые помогут сократить размер бандла в разы и ускорить загрузку сайта.

1. Tree Shaking

Механизм удаления неиспользуемого кода из бандла. Webpack и Vite автоматически убирают функции, которые не были импортированы. Работает только с ES-модулями (import/export). Для максимального эффекта используйте lodash-es вместо lodash, импортируйте конкретные функции вместо целых библиотек.

// Плохо: импорт всей библиотеки (~72 KB gzip)
import _ from 'lodash';

// Хорошо: только нужная функция (~1 KB gzip)
import debounce from 'lodash-es/debounce';

2. Code Splitting

Разделение кода на части (chunks), которые загружаются по мере необходимости. Пользователь загружает только JS для текущей страницы. В Next.js и Nuxt code splitting работает автоматически по роутам. Для React используйте React.lazy() и Suspense.

const HeavyChart = React.lazy(
() => import('./HeavyChart')
);

3. Dynamic Imports

Загрузка модулей только когда они действительно нужны. Идеально для модальных окон, тяжёлых библиотек визуализации, PDF-генераторов и редко используемых функций. Сборщик автоматически выделяет динамический импорт в отдельный chunk.

// Загружаем Chart.js только при клике
async function showChart() {
const { Chart } = await import('chart.js');
// ... использование Chart
}

4. Замена тяжёлых зависимостей

Один из самых эффективных способов. Замена moment.js (67 KB gzip) на dayjs (3 KB) экономит 64 KB. Замена lodash на native JS-методы или lodash-es с tree shaking может убрать до 70 KB. Используйте bundlephobia.com для проверки размера перед установкой.

Анализ: используйте webpack-bundle-analyzer или vite-bundle-visualizer для визуализации содержимого бандла и поиска самых тяжёлых зависимостей.

Совет: настройте CI/CD проверку: если PR увеличивает бандл больше чем на 5 KB — требуется обоснование. Это культура производительности в команде.

Размеры популярных npm-пакетов

Сравнительная таблица самых используемых JavaScript-библиотек по размеру gzip. Данные помогут выбрать лёгкие альтернативы при планировании архитектуры проекта.

ПакетКатегорияGzipЛёгкая альтернатива
momentДата/время67 KBdayjs (3 KB)
lodashУтилиты72 KBlodash-es + tree-shaking
angularФреймворк143 KBreact (6 KB) / vue (34 KB)
antdUI-библиотека350 KBshadcn/ui (tree-shakeable)
@mui/materialUI-библиотека170 KBheadlessui / radix-ui
firebaseBackend220 KBmodular imports
rechartsГрафики130 KBchart.js (68 KB)
three3D графика150 KBНет (уникален)
axiosHTTP14 KBky (3 KB) / fetch
formikФормы13 KBreact-hook-form (9 KB)
joiВалидация35 KBzod (13 KB) / valibot (5 KB)
rxjsReactive45 KBМодульные импорты

Советы по оптимизации бандла

Практические рекомендации, которые помогут держать размер фронтенд-сборки под контролем на всех этапах разработки.

1Проверяйте размер перед npm install

Прежде чем добавить новую зависимость, проверьте её размер на bundlephobia.com или через этот калькулятор. Одна «лишняя» библиотека может добавить 50-100 KB к бандлу. Иногда проще написать 20 строк кода, чем тянуть целый пакет.

2Используйте ES-модули библиотек

Многие библиотеки предлагают ESM-версии (lodash-es, date-fns). Они поддерживают tree shaking: сборщик включит в бандл только те функции, которые вы реально импортируете. CommonJS-модули tree shaking не поддерживают.

3Настройте бюджет в CI/CD

Добавьте проверку размера бандла в пайплайн: webpack performance hints, bundlesize, size-limit от Андрея Ситника. Если PR увеличивает бандл — это повод для ревью. Так бандл не будет расти незаметно.

4Предпочитайте native API

Современные браузеры поддерживают fetch(), Intl (форматирование дат и чисел), structuredClone(), Array.prototype.at(), crypto.randomUUID() и многое другое. Каждый год всё меньше поводов тянуть полифиллы и утилитарные библиотеки.

5Анализируйте бандл визуально

Инструменты вроде webpack-bundle-analyzer и vite-bundle-visualizer показывают treemap всех модулей. Вы сразу увидите, какая зависимость занимает больше всего места. Часто обнаруживаются сюрпризы: забытые пакеты, дублирующиеся версии, неожиданно тяжёлые транзитивные зависимости.

6Ленивая загрузка маршрутов

В SPA загружайте код каждого маршрута отдельным chunk-ом. Next.js, Nuxt и Remix делают это автоматически. Для React Router используйте React.lazy(). Пользователь получит только код текущей страницы, а остальное подгрузится по мере навигации.

Как пользоваться калькулятором

Простой пошаговый процесс оценки размера вашего фронтенд-бандла.

1

Найдите пакеты

Введите название npm-пакета в строку поиска. Встроенная база содержит 60+ популярных библиотек с точными размерами gzip.

2

Добавьте зависимости

Кликните на пакет в выпадающем списке. Можно добавить свой пакет с произвольным размером через форму ниже.

3

Настройте бюджет

Установите целевой размер бандла в KB gzip. Прогресс-бар покажет, укладываетесь ли вы в бюджет. Рекомендуемый лимит: 150-250 KB.

4

Оптимизируйте

Изучите рекомендации по замене тяжёлых зависимостей. Скопируйте отчёт в буфер для обсуждения с командой.

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

Бандл — это итоговый файл (или набор файлов) JavaScript и CSS, который формирует сборщик (webpack, Vite, Rollup, esbuild) из исходного кода вашего приложения и всех его npm-зависимостей. Именно эти файлы загружает браузер пользователя. Чем меньше их суммарный размер — тем быстрее загрузка сайта.
Рекомендуемый бюджет: 150-250 KB gzip для всего JavaScript на начальной загрузке страницы. Для лендинга достаточно 50-100 KB. Для SPA с богатым интерфейсом допустимо до 300 KB при условии code splitting. Если бандл превышает 500 KB gzip — это серьёзная проблема производительности.
Оба — алгоритмы сжатия для передачи по сети. Gzip (1992) поддерживается абсолютно всеми браузерами и серверами. Brotli (2015, Google) даёт на 15-20% лучшее сжатие, но работает только через HTTPS. Brotli особенно эффективен для текстовых файлов. На практике рекомендуется настроить оба: brotli как приоритет, gzip как fallback.
Tree shaking — механизм удаления неиспользуемого кода при сборке. Если вы импортируете из lodash только функцию debounce, tree shaking удалит остальные 300+ функций из бандла. Работает только с ES-модулями (import/export). CommonJS (require) tree shaking не поддерживает.
Code splitting делит код на отдельные части (chunks), загружаемые по необходимости. Вместо одного огромного файла браузер загружает маленький «начальный» бандл, а остальное подгружает лениво. В Next.js это происходит автоматически по маршрутам. Пользователь видит страницу быстрее, хотя общий объём кода не меняется.
Бюджет (bundle budget) — это договорённость в команде о максимально допустимом размере бандла. Без бюджета размер растёт незаметно: каждый разработчик добавляет «всего одну библиотеку». Инструменты вроде size-limit или webpack performance hints автоматически ломают CI/CD при превышении, заставляя осознанно подходить к зависимостям.
Напрямую. Тяжёлый JavaScript увеличивает LCP (время появления основного контента), TBT (время блокировки главного потока) и FID (задержка первого ввода). Google использует Core Web Vitals как фактор ранжирования. Сайты с быстрой загрузкой получают преимущество в поисковой выдаче.
Да. В калькуляторе есть форма для добавления пользовательских пакетов. Укажите название и размер в KB gzip. Это удобно для приватных библиотек, монорепо-пакетов или зависимостей, которых нет в встроенной базе. Raw-размер будет рассчитан автоматически с коэффициентом 3.5x.
Встроенная база содержит приблизительные размеры для текущих мажорных версий пакетов. Реальный размер зависит от версии, конфигурации tree shaking, sideEffects в package.json и других факторов. Для точных данных используйте bundlephobia.com или webpack-bundle-analyzer на реальном проекте.
Vite (использует Rollup для production) и esbuild дают наименьший размер бандла благодаря эффективному tree shaking. webpack 5 тоже хорошо оптимизирует, но требует больше настройки. Turbopack (Next.js) активно развивается. Для библиотек Rollup остаётся золотым стандартом — он создаёт самый чистый ESM-код.
Лиана Арифметова
Создатель

Лиана Арифметова

Миссия: Демократизировать сложные расчеты. Превратить страх перед числами в ясность и контроль. Девиз: «Любая повторяющаяся задача заслуживает своего калькулятора».

⚖️

Отказ от ответственности

Только для информационных целей. Все расчёты, результаты и данные, предоставляемые данным инструментом, носят исключительно ознакомительный и справочный характер. Они не являются профессиональной консультацией — медицинской, юридической, финансовой, инженерной или иной.

Точность результатов. Калькулятор основан на общепринятых формулах и методиках, однако фактические результаты могут отличаться в зависимости от индивидуальных условий, исходных данных и применяемых стандартов. Мы не гарантируем полноту, точность или актуальность приведённых расчётов.

Медицинские, финансовые и профессиональные решения должны приниматься исключительно на основании консультации с квалифицированными специалистами — врачом, финансовым советником, инженером или другим профессионалом в соответствующей области. Не используйте результаты данного инструмента как единственное основание для принятия важных решений.

Ограничение ответственности. Авторы и разработчики сервиса не несут никакой ответственности за прямой или косвенный ущерб, возникший в результате использования данных расчётов. Пользователь принимает на себя всю ответственность за интерпретацию и применение полученных результатов.

Похожие инструменты

🧮

Калькулятор стоимости сотрудника

Зарплата, НДФЛ, страховые взносы ПФР/ФСС/ФОМС, отпускные, больничные. Для работодателей России.

🏠

Калькулятор размера бюстгальтера

Определите размер бюстгальтера по обхвату груди и обхвату под грудью. Таблица размеров RU, EU, UK, US. Подбор чашки и пояса.

💻

Калькулятор BI Dashboard: производительность, лицензии, KPI, adoption

Комплексный калькулятор BI-дашбордов. Производительность (виджеты, время загрузки, concurrent users), расписание обновления данных, сравнение стоимости Power BI/Tableau/DataLens/Metabase/Superset, подбор виджетов, KPI framework, метрики внедрения DAU/MAU.

⚗️

Калькулятор скорости химической реакции

Уравнение Аррениуса k=A·e^(-Ea/RT), закон действия масс, период полупревращения и энергия активации.

💰

Калькулятор облигаций (YTM, дюрация, НКД)

Рассчитайте доходность к погашению (YTM), дюрацию, НКД и цену облигации. Для ОФЗ, корпоративных и муниципальных бондов.

💻

Число прописью (русский)

Число → слова с правильным склонением: рубли, штуки, тонны. Для документов, счетов и актов.

🔄

Универсальный конвертер единиц: длина, вес, объем

Мгновенный перевод физических величин: длина, масса, площадь, объем, температура, давление, скорость, энергия и мощность. Точный онлайн калькулятор.

🧮

Калькулятор вышивки крестиком

Расчёт размера вышивки, расхода ниток мулине и канвы. Аида 14-25, время работы.

🏗️

Калькулятор DIY мебели

Расчёт материалов для мебели своими руками: ЛДСП, кромка, фурнитура, конфирматы. Шкаф, стеллаж, тумба, комод.

Калькулятор центростремительной силы

Расчёт центростремительной силы и ускорения. Движение по окружности, угловая скорость, перегрузка (G-force).

🏗️

Калькулятор тротуарной плитки

Расчёт тротуарной плитки, бордюров, песка и щебня. Площадь, количество плитки, подушка и укладка.

🏠

Калькулятор скидок и выгоды (2+1, цена за кг)

Посчитать цену со скидкой, найти самый выгодный товар (цена за кг/литр) и проверить акции "Купи 2 получи 1".

💻

Калькулятор размера базы данных

Расчёты БД: размер таблиц, IOPS, память, индексы, репликация, шардирование

🧮

Калькулятор объёма бассейна

Объём воды в бассейне любой формы, расход химии и время подогрева. Для частных бассейнов.

🏗️

Калькулятор объёма гравия для дорожки

Расчёт объёма щебня и гравия для садовой дорожки, площадки, отмостки. Вес, количество самосвалов, многослойный расчёт.