В Quasar Framework управление маршрутами основано на библиотеке Vue Router, что позволяет организовывать навигацию с применением современных практик оптимизации, включая lazy loading (ленивую загрузку). Этот подход особенно полезен для крупных приложений, где важно минимизировать начальный размер бандла и ускорить загрузку страницы.
Lazy loading маршрутов заключается в том, что компоненты, привязанные к маршруту, загружаются только в момент перехода на этот маршрут, а не при старте приложения. Это позволяет:
В Quasar lazy loading реализуется через динамический импорт компонентов:
const routes = [
{
path: '/dashboard',
component: () => import('pages/DashboardPage.vue'),
name: 'dashboard'
},
{
path: '/profile',
component: () => import('pages/ProfilePage.vue'),
name: 'profile'
}
];
Здесь ключевой момент — использование функции
() => import('...'). При таком подходе Webpack создаёт
отдельный чанк для каждого компонента маршрута.
Quasar по умолчанию поддерживает lazy loading, если проект собран
через CLI. Для полноценного использования необходимо убедиться, что в
конфигурации Webpack активирован code splitting (в Quasar это
включено автоматически через quasar.conf.js).
Пример настройки маршрутов в src/router/routes.js с
применением ленивой загрузки:
import { route } from 'quasar/wrappers';
export default route(function () {
return [
{
path: '/',
component: () => import('layouts/MainLayout.vue'),
children: [
{ path: '', component: () => import('pages/IndexPage.vue') },
{ path: 'about', component: () => import('pages/AboutPage.vue') },
{ path: 'contact', component: () => import('pages/ContactPage.vue') }
]
}
];
});
Каждый дочерний маршрут создаёт отдельный бандл, который загружается только при обращении к этому маршруту.
Для удобства отладки и контроля размера бандлов можно назначать имена чанкам:
const routes = [
{
path: '/settings',
component: () => import(/* webpackChunkName: "settings-page" */ 'pages/SettingsPage.vue')
}
];
В результате Webpack создаст файл
settings-page.[hash].js, что облегчает анализ загрузки и
кэширование.
Для приложений с сложной структурой часто требуется ленивое
подгружение вложенных маршрутов. В Quasar это делается через
children:
{
path: '/admin',
component: () => import('layouts/AdminLayout.vue'),
children: [
{ path: 'users', component: () => import('pages/admin/UsersPage.vue') },
{ path: 'roles', component: () => import('pages/admin/RolesPage.vue') }
]
}
При переходе на /admin/users сначала загрузится
AdminLayout.vue, а затем UsersPage.vue. Это
позволяет разделять основные и второстепенные части приложения, экономя
ресурсы.
Комбинация ленивой загрузки и navigation guards
(beforeEnter, beforeEach) позволяет управлять
доступом к маршрутам без загрузки компонентов заранее:
{
path: '/premium',
component: () => import('pages/PremiumPage.vue'),
beforeEnter: (to, from, next) => {
if (store.getters.isPremiumUser) {
next();
} else {
next('/');
}
}
}
Компонент PremiumPage.vue загружается только если
пользователь прошёл проверку.
/* webpackPrefetch: true */:component: () => import(/* webpackPrefetch: true */ 'pages/StatsPage.vue')
Code splitting на уровне модулей — большие страницы можно делить на подкомпоненты и lazy load каждого подкомпонента.
Совмещение с Quasar plugins — некоторые плагины Quasar можно загружать лениво, чтобы уменьшить стартовый бандл.
Для контроля загрузки маршрутов рекомендуется использовать инструменты:
Эффективное применение lazy loading в Quasar позволяет создавать масштабируемые и производительные приложения, управляя ресурсами браузера и ускоряя пользовательский опыт без потери функциональности.