Основные техники оптимизации
Tree-shaking
Автоматическое удаление неиспользуемого кода из финального бандла.
// Используемый код
import { debounce } from 'lodash'
// Неиспользуемый код
import { throttle, delay, merge } from 'lodash'
Размер бандла: 87KB
Поддержка: Webpack 2+, Rollup, Vite
Code Splitting
Разделение кода на более мелкие части, загружаемые по мере необходимости.
Route-based splitting
const Home = lazy(() => import('./Home'))
const About = lazy(() => import('./About'))
Component-based splitting
const Modal = lazy(() => import('./Modal'))
const Chart = lazy(() => import('./Chart'))
Dynamic Imports
Загрузка модулей только при необходимости во время выполнения.
// Загрузка только при клике
async function handleExport() {
const { exportToPDF } = await import('./export-utils')
exportToPDF(data)
}
Инструменты анализа бандла
webpack-bundle-analyzer
Интерактивная визуализация размеров файлов в бандле
npx webpack-bundle-analyzer
source-map-explorer
Анализ source maps для понимания структуры бандла
npx source-map-explorer build/static/js/*.js
Vite Bundle Analyzer
Встроенный анализатор для проектов на Vite
vite build --mode analyze
Практические рекомендации
Целевые размеры бандла
< 200KB
Начальный JS (gzipped)
< 100KB
Критический CSS
< 50KB
Чанки по запросу
✅ Рекомендуется
- • Использовать ES modules для tree-shaking
- • Разделять vendor и app код
- • Lazy loading для роутов
- • Минификация и сжатие
- • Анализ дублирования кода
❌ Избегать
- • Импорт всей библиотеки для одной функции
- • Дублирование зависимостей
- • Большие JSON файлы в бандле
- • Загрузка всего кода сразу
- • Устаревшие полифиллы