Vue Router позволяет значительно уменьшить размер основного бандла за счет динамического импорта компонентов. Вместо того чтобы подключать все компоненты сразу, их можно загружать по мере необходимости. Это особенно полезно для крупных приложений с множеством страниц.
import { createRouter, createWebHistory } from 'vue-router'
const routes = [
{
path: '/home',
name: 'Home',
component: () => import('./views/Home.vue')
},
{
path: '/about',
name: 'About',
component: () => import('./views/About.vue')
}
]
const router = createRouter({
history: createWebHistory(),
routes
})
export default router
Ключевые моменты:
import() возвращает промис, и компонент
загружается только при навигации к соответствующему маршруту.component: () => import(/* webpackChunkName: "about" */ './views/About.vue')
Vue Router в сочетании с Webpack позволяет объединять несколько маршрутов в один чанк. Это полезно для страниц, которые часто используются вместе.
const routes = [
{
path: '/dashboard',
name: 'Dashboard',
component: () => import(/* webpackChunkName: "dashboard" */ './views/Dashboard.vue')
},
{
path: '/settings',
name: 'Settings',
component: () => import(/* webpackChunkName: "dashboard" */ './views/Settings.vue')
}
]
Преимущества:
route-level code-splittingДля больших приложений рекомендуется применять код-сплиттинг на уровне маршрутов. Это означает, что каждый маршрут имеет собственный чанк, который загружается только при обращении к маршруту.
Пример конфигурации с вложенными маршрутами:
const routes = [
{
path: '/user',
component: () => import('./views/UserLayout.vue'),
children: [
{
path: 'profile',
name: 'UserProfile',
component: () => import('./views/UserProfile.vue')
},
{
path: 'posts',
name: 'UserPosts',
component: () => import('./views/UserPosts.vue')
}
]
}
]
Особенности:
UserLayout.vue) загружается
один раз.Vue Router поддерживает предзагрузку компонентов для улучшения UX. Это полезно для маршрутов, которые пользователь вероятно откроет сразу после текущего.
const About = () => import('./views/About.vue')
const Home = () => import('./views/Home.vue')
About.preload = true
const routes = [
{ path: '/home', component: Home },
{ path: '/about', component: About }
]
Важные моменты:
preload позволяет браузеру заранее начать
загрузку компонента.Vite автоматически поддерживает динамический импорт, что упрощает настройку ленивой загрузки. Для создания отдельных чанков достаточно использовать стрелочную функцию:
const router = createRouter({
history: createWebHistory(),
routes: [
{
path: '/contact',
name: 'Contact',
component: () => import('./views/Contact.vue')
}
]
})
Особенности Vite:
webpack-bundle-analyzer или
rollup-plugin-visualizer).Эти техники позволяют создать легковесное Vue-приложение с высокой производительностью и быстрой загрузкой даже при большом количестве маршрутов и сложной архитектуре.