Разделение кода позволяет загружать только те части приложения, которые необходимы пользователю в данный момент, снижая время первичной загрузки. В Vue.js для этого используется динамический импорт:
const UserProfile = () => import('./components/UserProfile.vue');
Такой подход создает отдельный чанк для компонента
UserProfile, который будет подгружаться только при его
вызове. В сочетании с маршрутизатором Vue Router можно настроить ленивую
загрузку страниц:
const routes = [
{
path: '/profile',
component: () => import('./views/ProfileView.vue')
}
];
Важно учитывать, что чрезмерное дробление может привести к большому количеству мелких файлов, что увеличит количество HTTP-запросов. Рекомендуется разбивать код по логическим блокам.
Tree shaking — это процесс удаления неиспользуемого кода из итогового
бандла. Vue.js, будучи модульным, хорошо интегрируется с современными
сборщиками, такими как Webpack и Vite. Использование ES-модулей
(import { reactive } from 'vue') позволяет сборщику
эффективно удалять неиспользуемые функции и объекты.
Чтобы повысить эффективность tree shaking:
import/export.webpack-bundle-analyzer).Минификация уменьшает размер кода, удаляя пробелы, комментарии и сокращая имена переменных. Для Vue.js это стандартно поддерживается сборщиками:
TerserPlugin для JavaScript,
css-minimizer-webpack-plugin для CSS.esbuild.Дополнительно полезно включить сжатие на уровне сервера (gzip или Brotli), чтобы уменьшить объем передаваемых данных.
vite-imagetools
для автоматической генерации разных версий изображения.purgecss или встроенные возможности PostCSS.font-display: swap для ускорения
рендеринга текста.Помимо маршрутов, ленивую загрузку можно применять к любым крупным компонентам, используемым внутри страниц:
<template>
<Suspense>
<AsyncComponent />
<template #fallback>
<LoadingSpinner />
</template>
</Suspense>
</template>
<script>
const AsyncComponent = defineAsyncComponent(() =>
import('./components/BigComponent.vue')
);
</script>
Компонент Suspense обеспечивает отображение резервного
контента, пока основной компонент подгружается.
Использование хэшированных имен файлов помогает браузеру кэшировать неизменяемые чанки:
output: {
filename: '[name].[contenthash].js',
chunkFilename: '[name].[contenthash].js'
}
При изменении содержимого файла хэш меняется, что заставляет браузер загрузить новый файл. Старые файлы остаются в кэше до истечения срока действия, сокращая повторную загрузку.
Для контроля за размером итогового кода и зависимостями используют инструменты:
Регулярный анализ помогает обнаруживать библиотеки, которые сильно увеличивают размер бандла, и принимать решения о замене или ленивой загрузке.
lodash, вместо этого использовать lodash-es с
отдельными функциями:import debounce from 'lodash-es/debounce';
Эти методы совместно позволяют значительно снизить вес бандла, ускорить загрузку и улучшить пользовательский опыт.