Incremental Static Regeneration (ISR) — это подход к генерации
статических страниц, позволяющий сочетать преимущества
статической генерации и динамического
обновления данных без полной пересборки всего приложения. В
экосистеме Vue.js ISR часто используется вместе с фреймворками,
ориентированными на серверный рендеринг, такими как
Nuxt.js, особенно в версиях, поддерживающих
full static генерацию или hybrid rendering.
В традиционном статическом подходе каждая страница генерируется на этапе сборки. Этот метод обеспечивает высокую производительность, но не подходит для часто обновляемого контента, так как требует полной пересборки сайта. ISR решает эту проблему, позволяя:
Статическая генерация на запрос (On-Demand Static Generation) При первом обращении к странице сервер генерирует HTML и сохраняет его в кэш. Следующие пользователи получают уже сгенерированную страницу.
Регенерация через интервал (Revalidation Interval) Каждая страница может иметь время жизни, после которого сервер автоматически пересоздаёт её при следующем запросе. Это позволяет поддерживать актуальность данных без полной пересборки проекта.
Гибридный подход Часть страниц может оставаться статической навсегда, часть — регенерироваться динамически. Это особенно полезно для сайтов с большим количеством контента, где обновление всех страниц одновременно нецелесообразно.
Nuxt.js предоставляет удобный способ интеграции ISR через
nuxt generate,
fetch и новые API для server-side и static
rendering.
nuxt.config.jsexport default {
target: 'static', // Полная статическая генерация
generate: {
fallback: true, // Для страниц, которые генерируются on-demand
interval: 60 // Время регенерации в секундах
}
}
target: 'static' указывает, что основной режим —
статическая генерация.fallback: true позволяет Nuxt.js возвращать
страницу-заглушку, пока ISR создаёт HTML.interval задаёт интервал регенерации страницы.fetch для динамических данныхexport default {
async fetch() {
this.posts = await this.$axios.$get('https://api.example.com/posts')
},
data() {
return {
posts: []
}
}
}
Данные подгружаются на сервере, и при первой генерации страницы они сохраняются статически. После истечения интервала они могут быть автоматически обновлены.
ISR не влияет на реактивность Vue.js компонентов. Компоненты
продолжают использовать props,
data,
computed и
watch, а обновление страницы через ISR
лишь обновляет базовый HTML. Client-side hydration позволяет Vue.js
корректно инициализировать интерактивные элементы на статически
сгенерированной странице.
Incremental Static Regeneration сочетает скорость статических сайтов с гибкостью динамических приложений. В экосистеме Vue.js этот подход особенно эффективен в сочетании с Nuxt.js, позволяя создавать масштабируемые, производительные и актуальные веб-приложения без потери удобства разработки.