JavaScript Bundling: объяснение

Вы пишете приложения на React или Angular, используя множество файлов. Вы используете компоненты, сервисы и библиотеки.

Браузерам тяжело работать с большим количеством файлов. Загрузка 200 файлов означает 200 сетевых запросов. Это замедляет ваше приложение.

Бандлеры решают эту проблему. Они берут ваш код и импорты и объединяют их в один или несколько небольших файлов. Это делает загрузку эффективной.

Современные бандлеры делают больше, чем просто объединяют файлы. Они выполняют следующие задачи:

  • Минификация (Minification): они удаляют пробелы и комментарии. Они сокращают имена переменных для экономии места.
  • Tree shaking: они удаляют неиспользуемый код.
  • Разделение кода (Code splitting): они разбивают код на небольшие части (chunks). Пользователи загружают только то, что им нужно.

Меньшие файлы приводят к более быстрым приложениям.

Существует два основных инструмента: Webpack и Vite.

Webpack собирает всё ваше приложение перед его отдачей. Он мощный и гибкий. В больших проектах он может работать медленно, так как пересобирает всё заново при каждом изменении.

Vite — это современный выбор. Он отдает файлы напрямую во время разработки, используя нативные ES modules. Он обновляет только тот файл, который вы изменили. Это делает обновления мгновенными.

Сравнение:

Webpack:

  • Скорость разработки: Медленнее
  • Конфигурация: Сложная
  • Лучше всего подходит для: Крупных legacy-проектов

Vite:

  • Скорость разработки: Быстрая
  • Конфигурация: Простая
  • Лучше всего подходит для: Новых современных проектов

Используйте Vite для новых проектов.

Каждый бандлер следует трем этапам:

  1. Построение графа зависимостей: бандлер определяет, как файлы связаны друг с другом.
  2. Трансформация кода: он преобразует TypeScript или JSX в обычный JavaScript.
  3. Создание бандла: он записывает финальные файлы в папку для развертывания.

Чтобы ваш бандл оставался компактным, используйте эти советы:

  • Ленивая загрузка (Lazy loading): загружайте компоненты только тогда, когда они нужны пользователю.
  • Точечные импорты (Specific imports): не импортируйте целые библиотеки. Импортируйте только те конкретные функции, которые вы используете.
  • Анализируйте свой бандл: используйте инструменты, чтобы увидеть, какие файлы занимают больше всего места.
  • Используйте production-сборки: всегда развертывайте production-сборки вместо development-сборок.

Бандлеры делают ваши приложения быстрее, предоставляя меньше файлов меньшего размера.

Источник: https://dev.to/kavya1205/javascript-bundling-explained-from-zero-to-optimised-f7p