Статическая генерация представляет собой процесс предрендеринга всех страниц приложения на этапе сборки, что позволяет получать полностью готовый HTML и CSS без необходимости выполнения серверного кода при каждом запросе пользователя. Это значительно ускоряет загрузку страниц, снижает нагрузку на сервер и улучшает SEO-показатели.
Предрендеринг Все маршруты приложения обрабатываются на этапе сборки, и для каждого создается HTML-файл. Эти файлы потом раздаются пользователям как обычные статические страницы.
Данные во время сборки Данные могут быть получены из API или локальных источников до генерации страницы. Это означает, что конечный HTML уже содержит весь необходимый контент, без дополнительной загрузки данных на клиенте.
Сравнение с SSR и CSR
Наиболее популярным инструментом для статической генерации во Vue.js
является Nuxt.js. Nuxt поддерживает режим
target: 'static', который позволяет строить приложение как
полностью статический сайт.
export default {
target: 'static',
generate: {
fallback: true, // Для маршрутов, не сгенерированных заранее
routes: [
'/about',
'/contact'
]
}
}
target: 'static' указывает на необходимость генерации
статических файлов.fallback: true создает 404.html для
маршрутов, не сгенерированных заранее.routes позволяет явно определить, какие маршруты
предгенерировать.Динамические страницы могут быть сгенерированы, если заранее известны все возможные параметры. Например, при работе с блогом:
export default {
async generate() {
const posts = await fetch('https://api.example.com/posts').then(res => res.json());
return posts.map(post => `/blog/${post.id}`);
}
}
В этом примере API возвращает список постов, и на его основе Nuxt создает статические HTML-страницы для каждого поста.
Все стандартные Vue-компоненты полностью поддерживаются в режиме SSG. Важно помнить:
Гидратация — процесс привязки Vue-компонентов к уже существующему HTML, сгенерированному на этапе сборки. Это позволяет:
Пример использования гидратации:
HTML будет содержать начальное состояние счетчика, а Vue на клиенте продолжит его работу динамически.
Разделение маршрутов на чанки Использование асинхронных импортов для компонентов и страниц ускоряет время загрузки.
Кэширование данных Предзагрузка и кэширование внешних API-данных снижает нагрузку на сборку.
Lazy Loading изображений и компонентов Даже в статическом сайте важно минимизировать начальный объем загружаемых ресурсов.
SSG обеспечивает быструю загрузку, улучшенную индексацию поисковыми системами и надежную работу без сложной серверной инфраструктуры.