
React изначально задумывался как библиотека для разработки клиентской части веб-приложений, работающая в браузере. Однако благодаря своим преимуществам и универсальности, React активно применяется и на стороне сервера. Серверный рендеринг позволяет значительно повысить производительность приложений, улучшить SEO оптимизацию и ускорить загрузку страниц. В статье рассмотрим процесс установки React на сервер, настройку окружения, особенности сборки проекта и ключевые моменты использования библиотеки на серверной стороне.
Преимущества серверного рендеринга React
Серверный рендеринг имеет ряд весомых плюсов:
- SEO Оптимизация. Поисковые роботы лучше воспринимают предварительно сформированные страницы, содержащие готовый HTML-код, а не чистый JavaScript-контент.
- Производительность. Пользователи получают готовую страницу быстрее, особенно на устройствах с низкой производительностью или плохим интернет-соединением.
- Повышение доступности. Даже при отключённом JavaScript приложение сохраняет работоспособность и отображает базовую структуру интерфейса.
- Пользовательский опыт. Реактивность React сочетается с быстрым начальным рендером, обеспечивая плавный переход от серверного представления к интерактивному клиенту.
Однако важно учитывать, что серверный рендеринг требует дополнительной нагрузки на сервер, увеличивает сложность приложения и может привести к проблемам совместимости, если реализация выполнена некорректно.
Что понадобится для начала работы?
Прежде чем приступить к разработке приложения с серверным рендерингом, убедитесь, что у вас установлены следующие инструменты:
- Node.js версии 14+ (рекомендуемая LTS-версия).
- NPM или Yarn для управления зависимостями.
- Редактор кода (например, Visual Studio Code, WebStorm или Sublime Text).
- Базовая настройка среды разработки, включая терминал командной строки.
Шаг 1. Настройка окружения
Начнём с подготовки рабочей среды. Выполните следующую последовательность действий:
Создайте новый каталог для вашего проекта:
mkdir server-side-react-app cd server-side-react-appИнициализируйте проект с помощью npm или yarn:
npm init -y # Или yarn init -yУстановите необходимые зависимости:
npm install react react-dom express @babel/core @babel/preset-env @babel/preset-react babel-loader webpack webpack-cli webpack-node-externals html-webpack-plugin # Или yarn add react react-dom express @babel/core @babel/preset-env @babel/preset-react babel-loader webpack webpack-cli webpack-node-externals html-webpack-plugin
Мы установили следующие пакеты:
- react, react-dom — ядро библиотеки React и модуль для взаимодействия с DOM.
- express — популярный фреймворк для Node.js, позволяющий создавать HTTP-сервер.
- @babel/core, @babel/preset-env, @babel/preset-react, babel-loader — инструменты Babel для преобразования современного JSX и ECMAScript кода в версию, поддерживаемую всеми браузерами.
- webpack, webpack-cli, webpack-node-externals, html-webpack-plugin — сборщик проектов, обеспечивающий создание бандлов, готовых к работе на сервере.
Шаг 2. Создание базовой структуры приложения
Организуем файлы проекта следующим образом:
server-side-react-app/
├── src/
│ ├── App.jsx
│ └── index.js
├── public/
│ └── index.html
├── package.json
├── .babelrc
├── webpack.config.js
└── README.md
Основные файлы:
- src/App.jsx — корневой компонент React.
- src/index.js — точка входа для серверного рендера.
- public/index.html — шаблон HTML-файла.
- package.json — файл конфигурации пакетов.
- .babelrc — конфигурационный файл для Babel.
- webpack.config.js — конфигурация сборщика Webpack.
Шаг 3. Наполнение файла App.jsx
Реализуем простейший интерфейс приложения:
import React from 'react';
export default function App() {
return (
<div className="app-container">
<h1>Привет, мир!</h1>
<p>Это моё первое серверное React-приложение.</p>
</div>
);
}
Данный компонент отображает простое приветствие. Далее настроим серверный рендеринг.
Шаг 4. Серверный рендеринг в файле index.js
Откроем файл src/index.js и напишем основную логику серверного рендеринга:
import path from 'path';
import fs from 'fs';
import express from 'express';
import ReactDOMServer from 'react-dom/server';
import React from 'react';
import App from './App';
const PORT = process.env.PORT || 3000;
const app = express();
// Читаем шаблонизированный HTML-файл
const templatePath = path.resolve(__dirname, '../public/index.html');
const templateHtml = fs.readFileSync(templatePath, 'utf8');
// Функция для вставки серверного рендера в шаблон
const renderPage = (content) => {
return templateHtml.replace('<!-- app -->', content);
};
// Основной роутер для отображения приложения
app.get('*', (req, res) => {
const appString = ReactDOMServer.renderToString(<App />);
const fullHtml = renderPage(appString);
res.send(fullHtml);
});
// Запуск сервера
app.listen(PORT, () => console.log(`Сервер запущен на порте ${PORT}`));
Что здесь происходит:
- Мы загружаем основной HTML-шаблон из файла
public/index.html. - Затем заменяем специальный комментарий
<!-- app -->результатом рендеринга нашего React-компонента. - Отправляем полную HTML-страницу клиенту.
Шаг 5. Настройка Webpack и Babel
Настроим Babel и Webpack для правильной компиляции и сборки проекта.
Файл .babelrc
Создаем файл .babelrc с параметрами трансформации кода:
{
"presets": ["@babel/preset-env", "@babel/preset-react"]
}
Babel автоматически преобразует современный синтаксис и JSX в совместимый код.
Файл webpack.config.js
Создаём конфигурацию Webpack:
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const nodeExternals = require('webpack-node-externals');
module.exports = {
entry: './src/index.js',
target: 'node',
externalsPreload: true,
output: {
filename: 'bundle.js',
path: path.resolve(__dirname, 'dist'),
},
module: {
rules: [
{
test: /\.(js|jsx)$/,
exclude: /node_modules/,
loader: 'babel-loader'
}
]
},
plugins: [
new HtmlWebpackPlugin({
template: './public/index.html',
inject: false
})
],
externals: [nodeExternals()]
};
Основные опции:
- Входной файл (
entry) —./src/index.js. - Выходной файл (
output.filename) —bundle.js. - Тип целевой среды (
target) —node. - Исключены внешние модули (
externals), которые устанавливаются глобально.
Шаг 6. Старт проекта
Наконец, запускаем приложение командой:
npm start
# Или
yarn start
Если всё сделано правильно, вы увидите сообщение в консоли о старте сервера, а по адресу http://localhost:3000 откроется ваше первое серверное React-приложение.
Важные советы и рекомендации
- Используйте уникальные ключи для всех повторяющихся элементов, это ускоряет работу виртуального DOM.
- Помните, что серверный рендеринг добавляет нагрузку на сервер, поэтому убедитесь, что инфраструктура способна выдержать ожидаемый трафик.
- Старайтесь минимизировать объём передаваемых данных путём оптимизации ресурсов и уменьшением размера бандлов.
- Применяйте кэширование промежуточных результатов рендеринга, чтобы снизить нагрузку на сервер.
Заключение
Серверный рендеринг React открывает новые возможности для повышения производительности и улучшения SEO характеристик ваших веб-приложений. Следуя представленным инструкциям, вы сможете легко интегрировать данную технологию в ваш проект и начать разработку масштабируемых решений с React на сервере.