Из-за временных ограничений на территории РФ наблюдаются проблемы с оплатой. Если платёж не проходит, оставьте запрос в службу поддержки.Служба поддержки работает 24/7 — мы всегда на связи по вопросам хостинга и серверов.Открыт прием заявок на аренду выделенных серверов и размещение оборудования в дата-центре.Напоминаем: рекомендуем включить резервное копирование для дополнительной защиты данных.Доступна новая линейка VPS/VDS с NVMe-дисками и увеличенной производительностью.Технические работы на части серверов завершены. Все сервисы работают в штатном режиме.
Статья7 мин чтенияПросмотры1

CDN подключён, а карточка товара всё ещё медленная

CDN может ускорить изображения и при этом почти не изменить ожидание первого HTML. Разбираемся, как отделить работу пограничного узла от исходного сервера, кеш-промах от медленного приложения и сетевую задержку от отрисовки.

Комментарии 0

Быстрый пограничный узел с синими кабелями и перегруженный исходный сервер в глубине
В этой статье

После подключения CDN фотографии начинают загружаться с ближайшего узла, а карточка товара всё равно несколько секунд показывает пустой каркас. На панели провайдера трафик распределён, кеш работает, ошибок будто бы нет. Возникает соблазн признать CDN бесполезным или, наоборот, искать проблему только в браузере.

Оба вывода могут быть поспешными. CDN ускоряет ту часть ответа, которую действительно получает и может отдать с пограничного узла. Динамический HTML, персональная цена, корзина, остаток по складу и запросы к базе часто продолжают ждать исходный сервер. Сначала нужно выяснить, какой ресурс медленный и был ли он кеширован в конкретном запросе.

Разложите страницу на ответы, а не на один секундомер

Карточка товара состоит из основного HTML, стилей, сценариев, шрифтов, изображений и фоновых запросов. Один домен в адресной строке не означает один маршрут. Изображение может прийти из кеша CDN, HTML — с исходного сервера через CDN, а наличие в магазине — из отдельного API.

Показатель TTFB описывает время до первого байта конкретного ответа. В него попадают перенаправления перед запросом, установка соединения, путь по сети и ожидание обработки на сервере. Он не показывает, когда пользователь увидит главное изображение или сможет нажать кнопку покупки.

Поэтому фраза «страница отвечает за три секунды» слишком неопределённа. Уточните: какой URL, какой тип ресурса, новый или повторный запрос, кеш-попадание или промах, анонимный или авторизованный пользователь.

Схема пути запроса при попадании в кеш CDN и при обращении к исходному серверу
При кеш-промахе пограничный узел ждёт источник; при попадании отвечает сохранённым объектом.

Кеш-попадание и кеш-промах ведут к разным серверам

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

Если первый запрос медленный, а повторный заметно быстрее, это не доказательство исправного сайта. Возможно, вы сравнили промах с попаданием. Для популярной картинки такая разница нормальна; для HTML нужно понять, почему кеш промахивается и можно ли вообще безопасно кешировать этот ответ.

Есть нюанс: заголовок или панель с надписью «HIT» подтверждают работу кеша только для конкретного объекта и конкретного запроса. Они ничего не говорят о соседнем API, основном HTML и следующем регионе. Названия диагностических заголовков различаются у провайдеров, поэтому их смысл сверяют с документацией выбранного CDN.

Что почти всегда остаётся на исходном сервере

Даже при успешной раздаче статики источник продолжает участвовать в динамической работе магазина:

  • запускает приложение и шаблон страницы;

  • читает товар, цены и остатки из базы или кеша приложения;

  • проверяет регион, авторизацию, права и тип цены;

  • обращается к поиску, рекомендациям и внешним системам;

  • создаёт корзину, рассчитывает скидку и оформляет заказ;

  • формирует ответы, которые CDN не должен смешивать между покупателями.

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

Опасно «лечить» это общим публичным кешем для авторизованных страниц. Ответ, зависящий от сессии, договора, города или состава корзины, требует раздельного ключа кеша либо запрета общего хранения. Ошибка здесь хуже медленной страницы: одному посетителю можно показать данные другого.

Проведите четыре сравнения

Для диагностики достаточно небольшой матрицы, если менять по одному условию.

  1. Сравните основной HTML и крупное изображение той же карточки. Быстрое изображение при медленном HTML указывает на динамику или маршрут HTML, а не на раздачу всей страницы.

  2. Повторите запрос к одному и тому же URL и зафиксируйте статус кеша. Большая разница между промахом и попаданием помогает оценить стоимость обращения к источнику.

  3. Проверьте анонимную и авторизованную сессию. Персональная версия может законно обходить общий кеш, но её время всё равно нужно измерять.

  4. Сравните запрос из региона рядом с источником и из удалённого региона. Если задержка уменьшается только вдали, CDN решает сетевую часть; если везде долго до первого байта, смотрите генерацию и кеш-промахи.

Сохраняйте одинаковые адрес, параметры, состояние кеша и момент проверки. Нельзя сравнивать главную страницу утром с карточкой вечером и приписывать разницу CDN.

Условное сравнение этапов ответа при кеш-попадании и кеш-промахе
Сравнение имеет смысл для одного ресурса при зафиксированном состоянии кеша.

Найдите границу между сетью и приложением

В инструментах браузера начните с водопада запросов. Долгое ожидание первого байта у HTML при короткой загрузке статики сужает область поиска. Если HTML приходит быстро, но главное содержимое появляется поздно, проверьте блокирующие сценарии, стили, изображения и работу основного потока браузера.

На стороне CDN нужны статус кеша, возраст объекта, выбранный пограничный узел и причина обхода кеша, если провайдер её показывает. На исходном сервере — время приложения, запросов к базе, внешних вызовов и формирования ответа. Полезно передавать раздельные серверные длительности в диагностическом заголовке, но только для безопасных агрегированных этапов без внутренних секретов.

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

Почему HTML не попадает в кеш

Причина не всегда в ошибке. Персональный или авторизованный ответ может иметь корректный запрет на общее хранение. Метод запроса, cookie, заголовок авторизации, ответ с ошибкой или настройка CDN также способны исключить кеширование. Иногда объект сохраняется, но ключ кеша включает слишком много параметров и почти каждый запрос выглядит новым.

Проверьте последовательно:

  • разрешает ли политика ответа общее кеширование;

  • какие cookie, заголовки и параметры входят в ключ;

  • одинаков ли основной адрес ресурса после перенаправлений;

  • не очищается ли кеш после каждого импорта или незначительного изменения;

  • не истекает ли срок хранения раньше, чем приходит следующий пользователь;

  • не возвращает ли источник разные варианты без корректного разделения кеша.

Увеличение срока хранения полезно только после ответа на эти вопросы. Длинный срок не исправляет неверный ключ и повышает риск показывать устаревшую цену или остаток.

Отделите ускорение доставки от ускорения генерации

Если кеш-попадание быстрое, а промах медленный, работают в двух направлениях. Сначала уменьшают стоимость генерации на источнике: проверяют запросы базы, компоненты, внешний API и очистку прикладного кеша. Затем расширяют долю безопасных попаданий: стабилизируют адреса, ключ и срок хранения для действительно общих объектов.

Если и попадание медленное, проверяют маршрут до пограничного узла, размер ответа, сжатие, протокол соединения и перегрузку самого клиента. Если оба ответа быстрые, а страница ощущается медленной, переходят к метрикам отображения и интерактивности — серверная часть уже не главный подозреваемый.

Для магазина полезно держать отдельные цели хотя бы для трёх классов: общий HTML анонимной карточки, персональный HTML или API и статические ресурсы. Одна средняя цифра смешивает принципиально разные режимы.

Проверка после изменения

После настройки повторите исходную матрицу, а не один удачный запрос. Зафиксируйте долю кеш-попаданий по классам ресурсов, TTFB на попадании и промахе, время приложения на источнике и момент появления главного содержимого в браузере. Сравнивайте одинаковые периоды и отдельно отмечайте импорт каталога, очистку кеша и рекламные пики.

Проверьте корректность: цена, город, остаток, авторизация и корзина не должны переходить между сессиями. Затем вызовите контролируемое изменение товара и убедитесь, что общая страница обновляется в согласованный срок. Быстрый устаревший ответ не считается улучшением.

CDN не заменяет оптимизацию приложения, но и медленная динамика не делает CDN бесполезным. Точный вывод появляется после разделения маршрутов: что отдал пограничный узел, что пришлось получить с источника и где пользователь действительно ждал. Тогда действие следует из причины — менять правила кеша, ускорять генерацию или разбирать браузер, а не увеличивать всё сразу.

Обсуждение 0

Делись опытом и задавай вопросы. Комментарии без ссылок появляются после проверки редактором.

Пока никто не написал. Начни обсуждение.