Руководство по кэшированию ответов и интеграции CDN

Оптимизируйте производительность Smart Money API с помощью интеллектуальных стратегий кэширования. Изучите HTTP-заголовки кэширования, валидацию ETag, интеграцию с CDN и клиентские шаблоны кэширования для снижения задержек и затрат на трафик.

Опубликовано 21 марта 2026 16 минут чтения Производительность

Обзор кэширования

Конечные точки Smart Money API предоставляют данные криптовалютного рынка, которые меняются с разной частотой. Некоторые данные (адреса китов, ставки финансирования) обновляются каждые несколько секунд, а другие (исторический анализ, обучающие материалы) остаются статичными в течение часов. Интеллектуальное кэширование значительно улучшает производительность и снижает затраты.

Smart Money API реализует трехуровневую стратегию кэширования:

  • Кэш CDN Edge — Глобальная доставка контента с автоматической инвалидацией кэша
  • HTTP-кэш браузера — Клиентское кэширование с использованием стандартных HTTP-заголовков
  • Кэш приложения — Кэширование в памяти для часто используемых наборов данных

Инсайт производительности: Кэшированные ответы обрабатываются в 50-100 раз быстрее, чем новые запросы к API, и значительно экономят трафик. Правильно настроенное кэширование может сократить передачу данных на 70-85%.

Каждый ответ Smart Money API включает директивы кэширования, которые сообщают клиентам и CDN, как долго данные остаются актуальными. Понимание этих директив и их правильная реализация критически важны для оптимальной производительности.

Основы кэширования

HTTP-кэширование работает на основе заголовков ответа, которые указывают, можно ли кэшировать контент и как долго.

Заголовок Cache-Control

Основной механизм управления поведением кэширования. Каждый ответ Smart Money API включает заголовок Cache-Control, указывающий:

  • max-age — Время в секундах, в течение которого ответ остается актуальным
  • public/private — Могут ли промежуточные кэши сохранять его
  • must-revalidate — Нужно ли проверять актуальность перед выдачей
  • no-store — Не кэшировать конфиденциальные данные

Примеры заголовков кэширования

Разные конечные точки имеют разные требования к кэшированию:

Заголовки ответа
// Данные адресов китов (обновляются каждые 5 минут)
Cache-Control: public, max-age=300
ETag: "abc123def456"
// Ставки финансирования в реальном времени (обновляются каждую секунду)
Cache-Control: public, max-age=1
ETag: "xyz789abc123"
// Исторические данные (не меняются)
Cache-Control: public, max-age=86400, immutable
ETag: "static-content-v1"

Длительность кэширования по типам конечных точек

Тип данных Длительность кэширования Сценарий использования
Ставки финансирования в реальном времени 1-5 секунд Живая торговля, расчет позиций
Движения китов 5 минут Подтверждение сигналов, оповещения
Дневные данные OHLCV 1 час Технический анализ, графики
Исторический анализ 24 часа Бэктестинг, исследование
Статичный контент 7 дней Документация API, руководства, конфигурация
Получите API-ключ за 30 секунд

Готовы к разработке? Получите бесплатный API-ключ (100 вызовов/день, без карты) и начните получать данные о китах, финансировании и ончейн-данных.

Получить API-ключ →

HTTP-заголовки кэширования

Ответы Smart Money API включают несколько заголовков кэширования, работающих вместе для максимальной производительности при сохранении актуальности данных.

Cache-Control: Основной заголовок

Управляет поведением кэширования для браузеров и промежуточных кэшей:

Директивы Cache-Control
// Публичные данные, кэшируются 5 минут
Cache-Control: public, max-age=300
// Приватные данные, кэшируются только в браузере
Cache-Control: private, max-age=3600
// Неизменяемый контент, кэшируется навсегда
Cache-Control: public, max-age=31536000, immutable
// Всегда проверять актуальность перед выдачей
Cache-Control: public, max-age=0, must-revalidate
// Не кэшировать конфиденциальные данные
Cache-Control: private, no-store, no-cache

Заголовок Expires (устаревший)

Для старых клиентов Smart Money также предоставляет заголовок Expires (HTTP/1.0):

Заголовок Expires
// Абсолютное время истечения срока
Expires: Wed, 22 Mar 2026 14:30:00 GMT
// В HTTP/1.1 приоритет имеет max-age из Cache-Control

Заголовок Last-Modified

Указывает, когда контент был последний раз обновлен, позволяя условные запросы:

Использование Last-Modified
// Ответ включает Last-Modified
Last-Modified: Wed, 21 Mar 2026 10:15:30 GMT
// Клиент проверяет актуальность с If-Modified-Since
If-Modified-Since: Wed, 21 Mar 2026 10:15:30 GMT
// Если не изменилось, сервер отвечает 304 Not Modified
HTTP/1.1 304 Not Modified

Заголовок Vary

Сообщает кэшам, какие заголовки запроса влияют на ответ (аутентификация, параметры):

Заголовок Vary
// Ответ зависит от аутентификации и символов
Vary: Authorization, X-Symbols
// Кэши хранят отдельные версии для разных значений

ETag и условные запросы

ETag (Entity Tags) предоставляют эффективный способ проверки кэшированного контента без загрузки полного тела ответа.

Как работают ETag

  1. Первоначальный запрос — Клиент запрашивает данные, сервер отвечает с ETag
  2. Хранение в кэше — Клиент сохраняет ответ с ETag
  3. Последующий запрос — Клиент отправляет заголовок If-None-Match с кэшированным ETag
  4. Проверка — Если данные не изменились, сервер возвращает 304 Not Modified
  5. Сэкономленная пропускная способность — Тело ответа не отправляется, значительная экономия трафика

Реализация ETag

Первоначальный запрос и ответ
// Первый запрос
GET /v1/whales/btc HTTP/1.1
// Ответ включает ETag
HTTP/1.1 200 OK
ETag: "8a3b9c2d"
Cache-Control: public, max-age=300
Content-Type: application/json
{...response body...}
Условная повторная проверка
// После истечения срока кэша отправляется If-None-Match
GET /v1/whales/btc HTTP/1.1
If-None-Match: "8a3b9c2d"
// Если данные не изменились, сервер отвечает 304
HTTP/1.1 304 Not Modified
ETag: "8a3b9c2d"
Cache-Control: public, max-age=300
// Тело не отправлено! Трафик сэкономлен

Типы ETag

ETag может быть строгим или слабым:

Тип Формат Случай использования
Строгий ETag "8a3b9c2d" Байт-в-байт идентичен, используется для проверки
Слабый ETag W/"8a3b9c2d" Семантически эквивалентен, для изменений отображения

Директивы Cache-Control

Понимание директив Cache-Control позволяет создавать оптимальные стратегии кэширования для вашего приложения.

Справочник директив

Директива Значение Пример
max-age Время в секундах, в течение которого ответ остается актуальным max-age=300
public Кэш может хранить и делиться ответом public
private Кэшируется только для получателя private
must-revalidate Проверять актуальность при устаревании must-revalidate
no-cache Перед использованием необходимо проверить актуальность no-cache
no-store Не кэшировать вообще no-store
immutable Никогда не изменяется, кэшировать навсегда immutable
s-maxage Время кэширования для CDN s-maxage=3600

Практические шаблоны Cache-Control

Распространенные шаблоны
// Шаблон 1: Кэш браузера, CDN на 1 час
Cache-Control: public, max-age=300, s-maxage=3600
// Шаблон 2: Персональные данные, без кэширования прокси
Cache-Control: private, max-age=1800
// Шаблон 3: Всегда свежие данные, всегда проверять
Cache-Control: public, no-cache, must-revalidate
// Шаблон 4: Версионный неизменяемый ресурс
Cache-Control: public, max-age=31536000, immutable

Интеграция с CDN

Smart Money API доставляет ответы через глобальную сеть CDN Cloudflare, автоматически кэшируя ответы на edge-серверах по всему миру для минимальной задержки.

Как работает CDN Smart Money

  1. Запрос пользователя — Запрос попадает на ближайший edge-сервер Cloudflare
  2. Проверка кэша — Edge-сервер проверяет, есть ли ответ в кэше и актуален ли он
  3. Попадание в кэш — Если есть в кэше, ответ отправляется немедленно с задержкой <10 мс
  4. Промах кэша — Если нет в кэше, запрос отправляется на исходный сервер
  5. Сохранение и отправка — Ответ кэшируется и доставляется пользователю

Настройка ключа кэша

Cloudflare использует ключи кэша для уникальной идентификации кэшированных ответов. По умолчанию:

  • Путь запроса и параметры запроса включены
  • Большинство заголовков игнорируется (для максимизации попаданий в кэш)
  • Заголовки авторизации НЕ включены (нет утечки данных аккаунта)
  • Пользовательские заголовки могут быть включены через заголовок Vary

Очистка CDN

Smart Money автоматически очищает кэш CDN при обновлении данных:

Ручная очистка кэша
// Очистка конкретного URL из CDN
curl -X POST "https://api.smartmoneyapi.com/v1/cache/purge" \
-H "Authorization: Bearer token" \
-d '{
"urls": [
"https://api.smartmoneyapi.com/v1/whales/btc"
]
}'

Измерение производительности CDN

Проверьте заголовки ответа, чтобы узнать, был ли запрос обработан из кэша:

Заголовки ответа
// Попадание в кэш CDN edge
CF-Cache-Status: HIT
CF-RAY: 8a9b7c6d5e4f3g2h
Age: 45 // секунд с момента кэширования
// Промах кэша, запрос к исходному серверу
CF-Cache-Status: MISS
Age: 0

Клиентское кэширование

Реализуйте кэширование в вашем приложении, чтобы сократить количество API-вызовов и повысить отзывчивость.

Реализация кэширования в браузере

Кэширование в JavaScript
// Создание хранилища кэша
const cache = new Map();
async function fetchWithCache(url) {
// Сначала проверяем кеш
const cached = cache.get(url);
if (cached && !isCacheExpired(cached)) {
return cached.data;
}
// Получаем данные из API
const response = await fetch(url);
const data = await response.json();
// Парсим время кеширования из заголовков
const cacheControl = response.headers
.get('cache-control');
const maxAge = parseMaxAge(cacheControl);
// Сохраняем в кеш
cache.set(url, {
data,
expiry: Date.now() + (maxAge * 1000)
});
return data;
}

Кеширование с помощью Service Worker

Для поддержки оффлайн-режима и продвинутых стратегий кеширования используйте Service Workers:

Service Worker
// Кеширование ответов API с помощью Service Worker
self.addEventListener('fetch', (event) => {
if (event.request.url.includes('api.smartmoneyapi.com')) {
Сначала сеть, затем кеш
event.respondWith(
fetch(event.request)
.then(response => {
// Обновляем кеш свежим ответом
caches.open('api-cache')
.then(cache => cache.put(
event.request, response.clone()));
return response;
})
.catch(() =>
caches.match(event.request))
);
}
});

Стратегии сброса кеша

Иногда нужно принудительно обновить данные у клиентов. Используйте эти методы:

Версионный параметр

Добавьте параметр версии для инвалидации кеша при изменении данных:

Версионные URL
// Включаем версию данных или временную метку
https://api.smartmoneyapi.com/v1/whales/btc?v=1709980800
// При обновлении данных увеличиваем версию
https://api.smartmoneyapi.com/v1/whales/btc?v=1709981000
// Новый URL = новая запись в кеше

Принудительная ревалидация

Переопределите кеш с помощью Cache-Control: no-cache, когда нужны свежие данные:

Принудительное обновление данных
// JavaScript: Принудительный запрос свежих данных
fetch(url, {
cache: 'no-cache', // Всегда ревалидировать
headers: {
'Cache-Control': 'max-age=0'
}
});

Мониторинг производительности кеша

Отслеживайте процент попаданий в кеш и улучшения производительности для проверки стратегии кеширования.

Метрики кеша для мониторинга

  • Процент попаданий — Доля запросов, обслуживаемых из кеша (цель: >70%)
  • Время ответа — Средняя задержка (кеш: <50мс, без кеша: 100-300мс)
  • Сэкономленная пропускная способность — Снижение объема передаваемых данных
  • Нагрузка на сервер — Снижение запросов к основному серверу

Анализ заголовков кеша

Скрипт анализа кеша
// Анализируем заголовки кеша ответа
async function analyzeCache(url) {
const response = await fetch(url);
return {
cacheControl: response.headers
.get('cache-control'),
etag: response.headers.get('etag'),
age: response.headers.get('age'),
cfStatus: response.headers
.get('cf-cache-status'),
contentLength:
response.headers.get('content-length')
};
}

Лучшие практики кеширования

1. Уважайте заголовки ответа

Всегда учитывайте заголовки Cache-Control от Smart Money API. Не кешируйте контент с пометками no-store или no-cache.

2. Реализуйте условные запросы

Отправляйте заголовки If-None-Match (ETag) и If-Modified-Since при ревалидации кешированного контента. Экономьте трафик с ответами 304.

3. Кешируйте в зависимости от типа данных

  • Данные в реальном времени (ставки финансирования): максимум 1-5 секунд кеша
  • Живые сигналы (движение китов): кеш на 5-30 секунд
  • Часовые данные (OHLCV): кеш на 1 час
  • Исторические данные: кеш на 24 часа
  • Статический контент: кеш на 7 дней

4. Мониторьте эффективность кеша

Отслеживайте процент попаданий и улучшения задержки. Настраивайте TTL в зависимости от требований к актуальности данных и производительности кеша.

5. Используйте заголовки Vary с осторожностью

Заголовки Vary уменьшают попадания в кеш, создавая отдельные записи. Используйте только при необходимости для разных уровней аутентификации или параметров.

6. Кешируйте на нескольких уровнях

Реализуйте кеширование на уровнях CDN, браузера и приложения. Каждый уровень перехватывает запросы до обращения к основному серверу.

Оптимизируйте производительность API

Инфраструктура кеширования Smart Money API обеспечивает ответы менее 100 мс в глобальном масштабе. Реализуйте интеллектуальные стратегии кеширования для максимальной производительности и минимальных затрат.

Сравнение тарифов
Все тарифы включают полное кеширование через CDN. Более высокие тарифы предоставляют API для управления кешем и его очистки.

Связанные ресурсы

Начните бесплатно — 100 вызовов/день, без карты

Получайте данные о движении китов, финансировании, открытом интересе и ончейн-данных с 3 бирж через один API. Бесплатный тариф, без кредитной карты, можно обновить в любое время.

Начните бесплатно →
Попробуйте консоль API в реальном времени → (аккаунт не требуется)