Quasar предоставляет мощные инструменты для оптимизации загрузки ресурсов и маршрутов в приложениях на Vue.js. Стратегии prefetch и preload позволяют управлять тем, когда и как браузер загружает JavaScript-модули и компоненты, что существенно влияет на производительность и пользовательский опыт.
Prefetch предназначен для загрузки ресурсов вне текущего критического пути, когда браузер не занят выполнением более приоритетных задач. Это значит, что необходимые ресурсы подгружаются заранее для будущих навигаций, но не блокируют рендеринг текущей страницы. Prefetch оптимален для страниц, на которые пользователь может перейти позже.
Пример в Quasar:
const routes = [
{
path: '/about',
component: () => import(/* webpackPrefetch: true */ 'pages/About.vue')
}
]
В этом примере модуль About.vue будет загружен в фоновом
режиме, когда основной контент страницы уже отрисован.
Preload отличается тем, что ресурс загружается сразу, как только возможно, и влияет на критический путь. Preload полезен для ресурсов, которые понадобятся практически сразу после текущего рендеринга, например, шрифты, основные скрипты или крупные компоненты.
Пример:
const routes = [
{
path: '/dashboard',
component: () => import(/* webpackPreload: true */ 'pages/Dashboard.vue')
}
]
Загрузка компонента Dashboard.vue начнётся практически
сразу после загрузки основной страницы, что уменьшает задержку при
переходе.
Quasar CLI поддерживает автоматическое управление стратегиями через
Webpack. В quasar.conf.js можно настроить:
build: {
vueRouterMode: 'history',
chainWebpack (chain) {
chain.plugin('prefetch').tap(args => [{
rel: 'prefetch',
include: 'asyncChunks'
}])
chain.plugin('preload').tap(args => [{
rel: 'preload',
include: 'initial'
}])
}
}
include: 'asyncChunks' — применяет prefetch ко всем
асинхронным чанкам.include: 'initial' — применяет preload к начальным
ресурсам приложения.Это позволяет тонко настраивать, какие файлы должны подгружаться заранее, а какие — фоново.
Quasar и Vue поддерживают динамический импорт компонентов, который идеально сочетается с prefetch/preload стратегиями. Например:
<template>
<q-page>
<component :is="dynamicComponent"/>
</q-page>
</template>
<script>
export default {
data() {
return {
dynamicComponent: null
}
},
mounted() {
import(/* webpackPrefetch: true */ 'components/HeavyComponent.vue')
.then(mod => this.dynamicComponent = mod.default)
}
}
</script>
Такой подход позволяет подгружать тяжёлые компоненты только тогда, когда они реально понадобятся, при этом не замедляя первичный рендеринг страницы.
Quasar позволяет задавать prefetch и preload индивидуально для каждой страницы. Например, страницы с низкой вероятностью посещения лучше загружать с prefetch, а часто используемые — с preload.
const routes = [
{
path: '/settings',
component: () => import(/* webpackPrefetch: true */ 'pages/Settings.vue')
},
{
path: '/home',
component: () => import(/* webpackPreload: true */ 'pages/Home.vue')
}
]
Таким образом, переход на /home будет мгновенным, а
/settings подгрузится в фоновом режиме для будущего
использования.
Использование prefetch/preload стратегий напрямую влияет на Time to Interactive (TTI) и First Contentful Paint (FCP). Рекомендуется:
Для приложений, созданных через Quasar PWA, prefetch/preload интегрируется с сервис-воркерами:
// quasar.conf.js
pwa: {
workboxPluginMode: 'InjectManifest',
workboxOptions: {
runtimeCaching: [
{
urlPattern: /\/pages\/.*/,
handler: 'NetworkFirst',
options: {
cacheName: 'pages-cache',
}
}
]
}
}
Это позволяет стратегически распределять загрузку ресурсов между сетью и кэшем.
quasar.conf.js и Webpack.Эти подходы позволяют создавать плавные, отзывчивые приложения на Quasar с минимальной задержкой при переходе между страницами.