Определение
Server-Side Rendering (SSR) - это техника рендеринга, при котором React-приложение обрабатывается на сервере, и пользователь получает уже готовый HTML-код, а не пустой div, который затем заполняется JavaScript на клиенте (как в традиционном Client-Side Rendering - CSR).
Как работает SSR
Типичный процесс:
- Пользователь запрашивает страницу
- Сервер выполняет:
- Загружает необходимые данные
- Рендерит React-компоненты в HTML
- Отправляет полностью готовую страницу клиенту
- Браузер получает готовый HTML и может сразу его отобразить
- Затем подгружается JavaScript ("гидратация"/hydration) для добавления интерактивности
// Пример простого SSR на Express.js
import express from 'express';
import React from 'react';
import { renderToString } from 'react-dom/server';
const app = express();
app.get('/', (req, res) => {
const html = renderToString(<App />);
res.send(`
<html>
<head><title>SSR Example</title></head>
<body>
<div id="root">${html}</div>
<script src="/client.js"></script>
</body>
</html>
`);
});
Преимущества SSR
- SEO (Search Engine Optimization) - поисковые системы лучше индексируют полностью сформированный HTML
- Первоначальная загрузка (Faster Initial Load) - пользователь видит контент быстрее, особенно на медленных устройствах
- Социальные превью (Social Media Previews) - корректное отображение при расшаривании ссылок
- Работа без JavaScript - базовый контент доступен даже при отключенном JS
Когда использовать SSR
- Контент-ориентированные сайты (блоги, новостные порталы)
- E-commerce площадки (где важны SEO и первоначальная загрузка)
- Приложения, где критична доступность контента
Реализации SSR в экосистеме React
- Next.js - наиболее популярное решение
- Gatsby - для статических сайтов с возможностью SSR
- Remix - современный фреймворк с упором на SSR
- Razzle - кастомизируемое решение
Проблемы SSR
- Сложность настройки - требуется серверная инфраструктура
- Серверная нагрузка - каждый запрос требует рендеринга
- Гидратация (Hydration Issues) - возможны несоответствия между серверным и клиентским рендерингом
- Работа с состоянием - сложнее управлять состоянием между сервером и клиентом
Пример с Next.js
// pages/index.js в Next.js - автоматически получает SSR
export default function Home({ serverData }) {
return (
<div>
<h1>SSR Page</h1>
<p>Data fetched on server: {serverData}</p>
</div>
);
}
export async function getServerSideProps() {
// Выполняется на сервере для каждого запроса
const res = await fetch('https://api.example.com/data');
const serverData = await res.json();
return { props: { serverData } };
}
Оптимизация SSR
- Кэширование (Caching) - кэшировать рендеренные страницы
- Incremental Static Regeneration (ISR) - гибрид SSR и статической генерации (Next.js)
- Streaming SSR - постепенная отправка HTML
- Selective Hydration - приоритезация гидратации важных компонентов
Резюмируем
SSR - мощная техника для улучшения SEO, производительности и UX, но требующая дополнительных серверных ресурсов. Для большинства проектов оптимально использовать готовые решения типа Next.js, которые упрощают реализацию SSR и предоставляют дополнительные оптимизации.