Server Components (серверные компоненты) представляют собой новый подход к рендерингу интерфейсов, позволяющий выполнять часть логики и генерацию разметки на сервере, минимизируя нагрузку на клиент и сокращая объём передаваемого JavaScript. В Vue.js эта концепция реализуется с учётом реактивной архитектуры и возможностей современного серверного рендеринга.
Ключевой принцип заключается в разделении компонентов на серверные и клиентские:
Такое разделение позволяет комбинировать высокую производительность и интерактивность без перегрузки клиентского приложения лишним кодом.
Серверные компоненты во Vue.js создаются аналогично обычным, но с некоторыми отличиями:
<script setup server>
import { fetchPosts } from '@/api/posts'
const posts = await fetchPosts()
</script>
<template>
<div>
<h2>Список постов</h2>
<ul>
<li v-for="post in posts" :key="post.id">{{ post.title }}</li>
</ul>
</div>
</template>
Особенности синтаксиса:
<script setup server> указывает, что скрипт
выполняется только на сервере.fetchPosts(),
выполняются на сервере при рендеринге.Server Components полностью поддерживают реактивность Vue, но с ограничениями:
client-only или отдельные интерактивные компоненты.Пример комбинированного подхода:
<template>
<ServerPosts /> <!-- серверный компонент -->
<LikeButton /> <!-- клиентский компонент -->
</template>
Серверный компонент ServerPosts отрисовывается сразу с
контентом, а LikeButton подключается на клиенте и
обрабатывает клики пользователя.
Vue автоматически сериализует результат серверного компонента в JSON и вставляет его в страницу. Клиент может получить эти данные через props или через глобальное состояние. При этом не требуется выполнять дополнительные запросы после загрузки страницы.
<ServerUser :id="userId" />
На сервере ServerUser получает id, делает
запрос к базе и возвращает HTML с готовыми данными. На клиенте остаётся
только отображение готового блока.
window,
document и другим объектам браузера.Server Components активно используются в комбинации с Nuxt
3, где поддержка SSR и серверных компонентов интегрирована по
умолчанию. В Nuxt 3 можно создавать папку
server/components, куда помещаются компоненты, выполняемые
только на сервере. Такая структура облегчает организацию больших
приложений и обеспечивает чистое разделение логики.
Server Components в Vue.js создают мощный инструмент для оптимизации приложений, позволяя сочетать преимущества SSR с реактивностью и современными клиентскими интерфейсами. Их грамотное применение снижает нагрузку на клиент, улучшает SEO и ускоряет первую загрузку, обеспечивая плавный и быстрый пользовательский опыт.