Server-Side Rendering (SSR) в Quasar позволяет рендерить приложения на сервере перед отправкой HTML пользователю. Это улучшает SEO, ускоряет первый рендер и повышает восприятие производительности. Настройка SSR в Quasar требует последовательного подхода, включающего конфигурацию проекта, серверной логики и интеграцию с фронтенд-компонентами.
При создании нового проекта Quasar необходимо указать поддержку SSR:
quasar create my-ssr-app
В процессе выбора опций следует включить поддержку SSR. Quasar создаст структуру каталогов, включающую:
/src-ssr — серверная логика и middleware./src/router — маршруты, используемые как на клиенте,
так и на сервере./src/store — Vuex или Pinia для хранения
состояния./quasar.conf.js — основной конфигурационный файл, где
можно включать SSR-специфичные настройки.Основные блоки, отвечающие за SSR:
module.exports = function (/* ctx */) {
return {
ssr: {
pwa: false, // отключение PWA, если не требуется
prodPort: 3000, // порт для production сервера
maxAge: 1000 * 60 * 60 * 24, // кеширование HTML
middlewares: [
'render', // обязательный middleware для рендера
'customMiddleware' // можно добавить собственные
]
},
}
}
Ключевые моменты:
prodPort — порт, на котором SSR-сервер будет слушать
запросы.maxAge — определяет время кеширования HTML для
ускорения повторных запросов.middlewares — последовательность функций, которые
обрабатывают запрос до генерации HTML. Порядок важен./src-ssrВ каталоге /src-ssr содержатся следующие важные
файлы:
index.js — точка входа SSR сервера.middlewares/ — каталог для кастомных middleware.server-entry.js — серверный рендеринг Vue
приложения.extension.js — конфигурация дополнительных
модулей.Пример простого middleware:
module.exports = function (req, res, next) {
console.log(`[SSR] URL запроса: ${req.url}`);
next();
}
Middleware подключаются в quasar.conf.js через массив
ssr.middlewares.
SSR требует корректной работы роутинга и состояния. В Quasar маршруты
определяются в /src/router/routes.js:
const routes = [
{
path: '/',
component: () => import('pages/IndexPage.vue')
},
{
path: '/about',
component: () => import('pages/AboutPage.vue')
}
]
Для сохранения состояния между сервером и клиентом используется Vuex или Pinia. Сервер рендерит HTML с текущим состоянием, которое передается на клиент:
export function createStore () {
const store = createPinia()
return store
}
Передача состояния в клиент осуществляется через глобальный объект
window.__INITIAL_STATE__.
При SSR важно загружать данные на сервере, чтобы клиент получал
полностью сформированный HTML. Используется asyncData или
хук beforeMount с серверной проверкой:
export default {
async asyncData({ store }) {
await store.dispatch('fetchData')
}
}
Quasar автоматически вызывает этот метод при серверном рендеринге, если настроена правильная структура middleware и store.
SSR-сервер Quasar поддерживает встроенное кеширование HTML. Настройка
maxAge в quasar.conf.js позволяет хранить
сгенерированные страницы в памяти. Дополнительно можно использовать
внешние кеш-системы, например Redis, для хранения HTML и снижения
нагрузки на сервер.
Пример интеграции кеша:
const NodeCache = require('node-cache');
const ssrCache = new NodeCache({ stdTTL: 60 });
module.exports = function(req, res, next) {
const cachedPage = ssrCache.get(req.url)
if (cachedPage) {
return res.send(cachedPage)
}
next()
}
Запуск приложения в режиме разработки:
quasar dev -m ssr
Для production:
quasar build -m ssr
node .quasar/ssr-server/index.js
Отладка включает проверку:
Quasar позволяет совмещать SSR с PWA, но требует осторожности. В
quasar.conf.js:
ssr: { pwa: true }
При этом следует учитывать:
Все CSS и JS-файлы, подключаемые в проекте, должны быть совместимы с
SSR. Quasar автоматически обрабатывает стилевые файлы через Vue SSR
сборку. Для сторонних библиотек с прямым доступом к window
или document необходимо использовать условные проверки:
if (process.env.SERVER === false) {
// код, работающий только на клиенте
}
Это предотвращает ошибки при рендеринге на сервере.
Для производственного SSR важно иметь детальное логирование. Quasar позволяет подключать middleware для логирования запросов и ошибок:
const morgan = require('morgan')
app.use(morgan('combined'))
Это позволяет отслеживать:
Настройка SSR в Quasar — это последовательная работа с конфигурацией, серверной логикой, состоянием и роутингом. Правильная организация проекта обеспечивает быструю отдачу HTML, корректное состояние приложения на клиенте и стабильную производительность.