Tree shaking — это процесс удаления неиспользуемого кода из финальной сборки JavaScript, что позволяет уменьшить размер бандла и повысить производительность веб-приложений. Vue.js с каждой версией активно оптимизирует возможности tree shaking, делая его более эффективным за счёт модульной структуры и улучшенной интеграции с современными сборщиками вроде Vite и Webpack.
Vue 3 построен на модульной архитектуре, где ядро и функции разделены на отдельные пакеты. Основные преимущества:
import { reactive } from 'vue' позволяет сборщику понять,
какие части кода реально используются.Такой подход гарантирует, что при импорте отдельных API Vue из финального бандла будут исключены неиспользуемые функции.
Явные именованные импорты Использование конкретных экспортов вместо импорта всего объекта:
// Плохо для tree shaking
import Vue from 'vue';
// Хорошо
import { reactive, ref } from 'vue';
В первом случае сборщик может включить весь пакет Vue, во втором — только реально используемые функции.
Отказ от side effects Модули, которые не имеют
побочных эффектов при импорте, полностью подлежат tree shaking. Vue 3
стремится минимизировать такие эффекты в ядре и официальных пакетах,
например в @vue/runtime-core.
Оптимизация сборщиков Современные инструменты сборки, такие как Vite, Rollup и Webpack 5, понимают ES-модули и умеют анализировать импорт. Это позволяет автоматически исключать код, который не используется, даже в сложных зависимостях.
Импорт только нужных функций Composition API Вместо глобального подключения всех функций:
import * as Vue from 'vue';
следует импортировать выборочно:
import { reactive, computed, watch } from 'vue';
Это сокращает размер финального бандла и ускоряет загрузку.
Компоненты и плагины Компоненты, используемые в проекте, лучше подключать по мере необходимости, а не глобально. Например, библиотека компонентов:
import { ElButton, ElInput } from 'element-plus';
Это позволит tree shaking удалить все остальные элементы библиотеки.
Динамический импорт Подгрузка модулей по
требованию через import() поддерживает code splitting и
исключает неиспользуемый код из основной сборки:
const LazyComponent = () => import('./components/LazyComponent.vue');Для оценки результата tree shaking в Vue-проектах используют:
--report: показывает, какие
модули включены в сборку и их объём.Регулярный анализ позволяет выявить лишние импорты, неиспользуемые функции и снизить общий размер приложения.
Уменьшение размера бандла напрямую влияет на:
Vue.js продолжает улучшать tree shaking за счёт:
Эти изменения делают Vue 3 не только мощным с точки зрения функциональности, но и крайне эффективным с точки зрения размера и производительности бандла.