Ответ
Server-Side Rendering (SSR) — это подход, при котором HTML-страница полностью формируется на сервере в ответ на запрос браузера, а не на клиенте с помощью JavaScript. Это улучшает SEO и ускоряет первую отрисовку контента (First Contentful Paint).
В Python SSR реализуется в основном с помощью шаблонизаторов в веб-фреймворках:
1. Традиционные фреймворки (Django, Flask)
Они используют SSR по умолчанию, передавая данные в шаблоны и возвращая готовый HTML.
# Пример на Flask с шаблонизатором Jinja2
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def home():
# Сервер рендерит HTML-шаблон с переданными данными
return render_template('index.html', title='SSR Page', user='Admin')
2. Асинхронные фреймворки (FastAPI, Starlette)
Для них также подключаются шаблонизаторы, например, Jinja2.
# Пример на FastAPI
from fastapi import FastAPI, Request
from fastapi.templating import Jinja2Templates
app = FastAPI()
templates = Jinja2Templates(directory="templates")
@app.get("/")
async def read_root(request: Request):
return templates.TemplateResponse("item.html", {"request": request, "id": "home"})
Преимущества SSR:
- Отличная SEO-оптимизация: Поисковые роботы сразу получают полный HTML-контент.
- Быстрая первая загрузка: Пользователь видит контент быстрее, так как браузеру не нужно выполнять JS для его отрисовки.
- Работа без JavaScript: Базовый функционал доступен даже с отключенным JS.
Недостатки SSR:
- Высокая нагрузка на сервер: Каждое взаимодействие, требующее обновления страницы, генерирует HTML на сервере.
- Менее плавный UX: Полная перезагрузка страницы при навигации может быть медленнее, чем динамическое обновление в SPA (Single Page Application).