Bundle в контексте Vue.js — это итоговый файл (или набор файлов), который собирается с помощью инструментов сборки, таких как Vite или Webpack, и содержит весь необходимый код приложения, включая компоненты, зависимости и стили. Оптимизация бандла напрямую влияет на скорость загрузки приложения и эффективность использования ресурсов.
Webpack Bundle Analyzer Позволяет визуализировать содержимое бандла в виде интерактивной диаграммы. Основные команды для интеграции с Vue CLI:
vue add webpack-bundle-analyzer
npm run build --report
В результате будет создан интерактивный HTML-файл с детализацией:
Vite Visualizer Для проектов на Vite
используется плагин rollup-plugin-visualizer:
import { visualizer } from 'rollup-plugin-visualizer'
export default {
plugins: [visualizer({ open: true })]
}
Результат — графический отчет с указанием размеров каждого импортируемого модуля.
Source Map Explorer Поддерживает анализ сгенерированных source map. Позволяет выявлять скрытые большие зависимости:
npx source-map-explorer dist/assets/*.jsVue.js поддерживает динамический импорт компонентов с помощью синтаксиса:
const AsyncComponent = () => import('./components/AsyncComponent.vue')
Особенности:
const routes = [
{ path: '/home', component: () => import('./views/Home.vue') },
{ path: '/about', component: () => import('./views/About.vue') }
]
Tree Shaking удаляет неиспользуемый код из бандла. Работает только с ES-модулями. Примеры практики:
// Не оптимально
import _ from 'lodash'
// Оптимально
import debounce from 'lodash/debounce'
export function utilA() {}
export function utilB() {}
Так Webpack/Vite сможет исключить неиспользуемые функции из итогового бандла.
Вместо глобального импорта больших библиотек подключать их только там, где они реально нужны:
let Chart
async function loadChart() {
if (!Chart) {
Chart = await import('chart.js')
}
return Chart
}
Это позволяет не загружать тяжелые библиотеки при первом рендере.
Минификация CSS и JS:
Оптимизация изображений:
vite-imagetools или
image-webpack-loader.Встраивание шрифтов через woff2 вместо
ttf для снижения веса.
filename: [name].[contenthash].js позволяет
браузеру кэшировать файлы, меняя их только при обновлении
содержимого.moment.js на dayjs
сокращает размер бандла почти в 10 раз.Эти показатели напрямую зависят от размеров бандлов и стратегии их разделения.
Эти методы позволяют создавать Vue.js приложения с быстрым стартом, низкой загрузкой ресурсов и высоким уровнем отзывчивости интерфейса.