Как работает server-side интеграция
В client-side архитектуре путь выглядит так: сервер → HTML без рекомендаций → браузер → JS-сниппет → API персонализации → рекомендации отрисованы. Это два последовательных round-trip, и пользователь видит «мигание»: блок сначала пустой, потом заполняется.
В server-side архитектуре:
1. Запрос от браузера → Сервер магазина
2. Сервер → API платформы персонализации (параллельно с другими данными)
3. Сервер получает рекомендации, встраивает в HTML-шаблон
4. Готовая HTML-страница → Браузер
Пользователь видит рекомендации сразу при загрузке страницы — без задержки и мигания.
Архитектурные паттерны
Синхронный вызов
# Псевдокод: синхронный вызов при рендеринге страницы
def render_pdp(product_id, user_id):
product = db.get_product(product_id)
try:
recommendations = personalization_api.get_recommendations(
user_id=user_id,
context={"product_id": product_id},
timeout=200 # ms — жёсткий timeout
)
except TimeoutError:
recommendations = bestsellers_cache.get() # fallback
return render_template("pdp.html",
product=product,
recommendations=recommendations)
Параллельный вызов
Для страниц с несколькими блоками рекомендаций вызовы API запускаются параллельно:
with ThreadPoolExecutor() as executor:
future_similar = executor.submit(api.similar_items, product_id)
future_bought_together = executor.submit(api.bought_together, product_id)
similar = future_similar.result(timeout=0.2)
bought_together = future_bought_together.result(timeout=0.2)
Кэширование ответов
| Тип контента | Рекомендуемый TTL |
|---|---|
| Бестселлеры / тренды | 15–60 мин |
| Рекомендации для анонима | 5–15 мин |
| Персональные рекомендации (авторизованный) | 1–5 мин |
Кэширование на уровне сервера (Redis, Memcached) снижает нагрузку на API и устраняет риск деградации при пиковом трафике.
Когда выбирать server-side
- SEO критичен — рекомендательные блоки должны индексироваться
- Headless/API-first архитектура — нет единого JS-контекста
- Высокий трафик — нужна предсказуемая производительность без зависимости от скорости браузера
- Нет мигания (CLS) — важно для Core Web Vitals и UX
Совет: для начала внедрения нередко разумен гибридный подход: критичные блоки (главная карусель, PDP-рекомендации) — server-side; дополнительные (попапы, баннеры) — client-side JS. Это снижает объём разработки при первой интеграции.