Перейти к основному содержимому

Кэширование и производительность

Что можно кэшировать

  • GET /v3/streams — 30–60 секунд. Содержит каталоги, которые не меняются мгновенно.
  • GET /v2/mini-player/stream — 15 секунд. Deep link не меняется чаще.
  • GET /v3/translation/quick-state — рекомендуется не кэшировать, иначе потеряете мгновенные обновления.

Стратегии

  1. Edge-кэш: используйте CDN (Cloudflare, Fastly) с respect к query-параметрам (feedProductId, categoryId, limit, offset). Важно: не кэшируйте заголовок Authorization, иначе токены могут утечь.
  2. Application-кэш: в бэкендах храните только поле body, но прокидывайте serverTime для понимания свежести данных.
  3. Soft refresh: обновляйте UI из кэша, но параллельно отправляйте фоновой запрос и сравнивайте serverTime.
Безопасность кэширования

Никогда не кэшируйте ответы на уровне CDN с учётом заголовка Authorization. Это может привести к утечке токенов между клиентами. Используйте backend proxy для кэширования с Bearer токенами.

Валидация JSON-конверта

function unwrap(response) {
if (response.status !== 200) {
throw new Error(`Transport error ${response.status}`);
}

const { status, body, serverTime } = response.data;
if (status !== 200 && body?.error) {
const err = new Error(body.error.message || 'ShopStory API error');
err.code = body.error.code;
err.serverTime = serverTime;
throw err;
}

return { body, serverTime };
}

Отладка

  • При работе с CDN логируйте заголовок X-Response-From-Application-Cache-Header.
  • Сохраняйте serverTime и сравнивайте его между ответами, чтобы отслеживать задержки в попадании данных.
  • Используйте PageSpeed/LightHouse, чтобы убедиться, что ваш фронтенд не блокируется лишними запросами.

Готово. Вернитесь в раздел ресурсов, чтобы настроить инструменты разработки.