Prefetch стратегии в Vue Router позволяют оптимизировать загрузку ресурсов и улучшить пользовательский опыт за счёт предварительной загрузки компонентов маршрутов, данных или асинхронных модулей до их непосредственного использования. Эти стратегии особенно актуальны для приложений с большим количеством страниц и тяжёлыми компонентами.
В Vue Router маршруты могут быть определены с использованием асинхронной подгрузки компонентов:
const routes = [
{
path: '/dashboard',
component: () => import('@/views/Dashboard.vue')
}
];
При таком подходе компонент Dashboard.vue будет загружен
только при переходе на маршрут /dashboard. Это снижает
первоначальный размер бандла, но может привести к задержке при первом
открытии страницы.
webpackPrefetchWebpack поддерживает директиву webpackPrefetch, которая
позволяет загружать асинхронные чанки в фоновом режиме
после загрузки основного кода:
const routes = [
{
path: '/dashboard',
component: () => import(
/* webpackPrefetch: true */ '@/views/Dashboard.vue'
)
}
];
Особенности:
Предварительная загрузка данных может быть реализована через
навигационные охранники (beforeEnter) или через Composition
API внутри компонентов:
const routes = [
{
path: '/profile/:id',
component: () => import('@/views/Profile.vue'),
beforeEnter: async (to, from, next) => {
try {
const userData = await fetchUser(to.params.id);
to.meta.userData = userData;
next();
} catch (error) {
next('/error');
}
}
}
];
Преимущества:
meta объекта
маршрута.Для компонентов, которые отображаются в виде ленивых модулей на странице (например, секции, появляющиеся при скролле), можно использовать Intersection Observer:
Преимущества:
Vue Router предоставляет хук router.beforeEach, который
можно использовать для предзагрузки компонентов перед фактическим
переходом:
router.beforeEach((to, from, next) => {
if (to.path === '/dashboard') {
import('@/views/Dashboard.vue');
}
next();
});
Этот подход позволяет запускать фоновую загрузку компонентов ещё до перехода, ускоряя последующий рендер.
Для сложных SPA оптимально сочетать несколько стратегий:
beforeEnter или
Composition API — для критичных данных маршрута.Комбинирование стратегий позволяет достичь баланса между размером начального бандла, скоростью отображения контента и отзывчивостью интерфейса.
Для оценки эффективности prefetch стратегий полезно использовать:
Time to Interactive) для маршрутов.Настройка предзагрузки должна опираться на реальные сценарии пользовательского поведения, чтобы не перегружать сеть и не увеличивать расходы на трафик.