9 мин чтения Скорость, безопасность, хостинг

Почему сайт «думает» перед загрузкой: разбираем TTFB

Битриксинтернет-магазины
Содержание10

Время ответа сервера (TTFB) — пауза до первого байта HTML: браузер уже ждёт, а страница ещё пуста. Полевые данные Google оценивают задержку по своим порогам качества, а лабораторный PSI показывает другой замер. Разберём waterfall по фазам и найдём, где тормозят сеть, PHP, база или CMS.

Почему сайт думает: что такое TTFB до первого байта

Пока экран белый, браузер уже отправил запрос и ждёт первый байт HTML. Эта пауза и есть TTFB. Полная загрузка, DOMContentLoaded и отрисовка происходят позже.

Сайт может быстро отдать первый байт, а потом долго загружать стили и скрипты.

В waterfall запрос HTML делится на фазы. DNS ищет адрес хоста, TCP открывает соединение, TLS согласует шифрование. Waiting (TTFB) показывает ожидание первого байта после отправки запроса; Download — передачу HTML. Первые фазы связаны с сетью и соединением, а waiting зависит также от веб-сервера, PHP, базы и CMS.

Waiting — ожидание. Download — передача.

На карточке магазина DNS и TLS могут пройти быстро, а waiting растянется, пока WordPress или Битрикс собирают шаблон и товары. CDN сокращает сетевой путь до origin. HTTP/2 и HTTP/3 влияют на соединение, но не ускоряют сборку HTML приложением.

Пока браузер не получил первый байт HTML, контент ещё не начал отображаться. TTFB — только часть загрузки страницы.

Какое время ответа сервера считают нормой

Полевой TTFB: как читать пороги Google: Хорошо до 800, Нужно улучшить 800–1800, Плохо больше 1800

В полевых данных CrUX Google разделяет TTFB на хороший, требующий улучшения и плохой. Это ориентиры для полевых измерений, а не универсальная оценка любого лабораторного прогона.

Лабораторные замеры PSI, Lighthouse и WebPageTest помогают воспроизвести проблему. Полевые данные показывают опыт пользователей. Не сравнивайте показатели из разных типов замеров как одну шкалу.

География и тип страницы влияют на результат: расстояние до дата-центра меняет сетевую часть, а корзина может собираться дольше витрины. Для обычной витрины ориентируйтесь на полевые данные CrUX. Если страница требует авторизации и персонализации, одного числа TTFB недостаточно: нужно разбирать её запросы отдельно.

Для сайта с региональной мобильной аудиторией сначала смотрите полевые данные CrUX. Лабораторный замер из одной точки не показывает опыт всех посетителей.

Как TTFB связан с LCP и Core Web Vitals

TTFB не входит в Core Web Vitals, но влияет на время до начала отрисовки. Пока браузер не получил HTML, он не может показать основной контент страницы. Поэтому долгое ожидание первого байта может увеличить LCP, даже если изображение главного блока уже оптимизировано.

CrUX отражает полевые замеры, а лабораторный PSI запускает тест в заданных условиях. Результаты могут расходиться из-за географии и сетевого подключения посетителей.

Яндекс.Вебмастер и Метрика дают дополнительные данные о сайте и его аудитории. Проверяйте по ним динамику вместе с замерами конкретных страниц. Снижать TTFB стоит ради более быстрой отдачи страницы и сокращения ожидания до отрисовки.

TTFB не входит в Core Web Vitals, но задержка первого байта может отодвинуть LCP.

Из чего складывается задержка ответа

На TTFB влияют сетевой путь, веб-сервер и работа приложения. Чтобы найти причину, сравните несколько запросов и посмотрите, на какой фазе растёт задержка.

  • Сеть: DNS и маршрут до origin. Сравните замеры из разных регионов.
  • TLS: время соединения. Если растёт эта фаза, проблема возникает до генерации HTML.
  • Веб-сервер: очередь запросов или ожидание свободного процесса. Сравните замеры в часы нагрузки и вне пика.
  • PHP: тяжёлая логика приложения. Если статический файл отвечает быстрее PHP-страницы, проверьте обработку запроса и OPcache.
  • База данных: медленные запросы на листингах и фильтрах. Сравните их с карточкой товара.
  • Внешние API: синхронный вызов CRM, 1С, оплаты или геосервиса во время сборки страницы.
  • CMS: плагины и темы WordPress, некешируемые компоненты Битрикс или код самописного сайта.

Таймаут браузера, прокси или PHP — это обрыв ожидания, а не высокая, но конечная задержка. Ищите, кто именно прекращает запрос.

Как измерить время ответа сервера

Выбирайте инструмент под вопрос. В DevTools откройте запрос документа HTML и посмотрите Timing -> Waiting (TTFB): это замер конкретного запроса в текущих условиях. PageSpeed Insights показывает лабораторный TTFB и, если данных достаточно, полевые показатели CrUX.

WebPageTest помогает сравнить замеры из разных точек и условия первого и повторного посещения. Один удачный прогон не описывает опыт всей аудитории.

Яндекс.Вебмастер и Метрика дают дополнительные данные по аудитории сайта. Не делайте вывод о сайте по одному лабораторному запросу.

Ошибка «истекло время ожидания ответа» означает, что браузер, прокси или сервер прекратил ждать. Высокий, но конечный TTFB — другая проблема: страница всё же пришла. Если зависает страница обмена, проверьте обращения к 1С и внешним API.

Зелёный лабораторный замер не гарантирует, что посетители из других регионов ждут столько же.

Чек-лист: где искать причину по стеку

Ищите причину сравнением запросов. Сначала проверьте ту же страницу из другого региона, затем сравните замеры с CDN и без него. После этого сопоставьте статику и динамическую страницу, карточку товара и корзину. Если статика отвечает быстро, а карточка медленно, проверяйте приложение, базу и CMS.

В WordPress проверьте кэш страниц, object cache, тяжёлые плагины и задачи wp-cron, запускаемые при запросе. В 1С-Битрикс проверьте композитный и автокэш, некешируемые компоненты и обмен с 1С. Подробнее о композитном кэше и типичных узких местах 1С-Битрикс. В самописном магазине проверьте персонализацию и синхронные запросы к CRM или учётной системе.

Симптом Возможный слой Что проверить
Быстро рядом с дата-центром, медленно из другого региона Сеть Замер без CDN и из второй точки
Статика быстрая, PHP-страница медленная PHP и CMS OPcache, кэш страниц, компоненты
Листинг и фильтры медленные, карточка быстрее База данных Запросы, индексы, N+1
Корзина и кабинет медленные, витрина быстрая API и origin Вызовы 1С, CRM и персонализация
Задержка появилась после установки модуля CMS Плагины или компоненты
Очередь и обрывы в часы нагрузки Хостинг Процессы PHP, доступные ресурсы и диск

Тариф хостинга сам по себе не предсказывает TTFB. VPS не исправит медленный SQL, а выделенный сервер не уберёт задержку внешнего API. Сравнивайте замеры и нагрузку до смены тарифа.

Как сократить TTFB: что даёт эффект раньше

Начните с кэша и измерений, а не со смены тарифа. OPcache уменьшает повторную компиляцию PHP-скриптов; кэш страниц или композитный кэш помогает на публичных страницах. Для корзины и кабинета с персонализацией этот способ не подходит: их содержимое зависит от пользователя.

  1. Замерьте TTFB документа HTML в DevTools и сравните его с полевыми данными.

  2. Проверьте работу OPcache.

  3. Настройте кэш страниц WordPress или композитный кэш Битрикс.

  4. Найдите медленные запросы базы на листингах и фильтрах.

  5. Уберите синхронные вызовы CRM, 1С и геосервисов из генерации HTML, если архитектура это позволяет.

  6. Проверьте ресурсы хостинга, если кэш настроен, но остаются очередь PHP и задержки диска.

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

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

Когда кэш и CDN не спасают интернет-магазин

Кэш и CDN ускоряют публичные страницы магазина, но корзина, кабинет и персонализированные фильтры могут собираться на origin для каждого пользователя. Если проблема есть только на таких страницах, очистка кэша витрины её не решит.

Синхронный обмен с 1С или CRM во время запроса задерживает ответ, пока внешний сервис не вернёт данные. Композитный кэш не устранит ожидание в некешируемом компоненте. Проверьте, происходит ли вызов при каждом открытии страницы.

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

CDN ускоряет публичные страницы, но динамические страницы всё равно могут ждать origin.

Когда замеры указывают на задержку динамической страницы, сохраните URL проблемной страницы и данные waterfall. По ним разработчик сможет определить, где растёт время ожидания.

Источники

Частые вопросы

Что такое время ответа сервера и чем TTFB отличается от полной загрузки?

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

Какое время ответа сервера считается нормальным?

В полевых данных CrUX Google TTFB делят на хороший, требующий улучшения и плохой. Лабораторный PSI может показать другой результат. Сопоставляйте показатели одного типа и периода измерения.

Как проверить время ответа сервера?

В DevTools откройте запрос HTML и посмотрите Waiting (TTFB). В PageSpeed Insights сравните лабораторный результат с полевыми данными CrUX, если они доступны. Для аудитории в России дополните замеры данными Яндекс.Вебмастера или Метрики.

Как сократить время ответа сервера?

Проверьте OPcache и кэш публичных страниц, затем разберите медленные запросы базы и синхронные вызовы внешних сервисов. HTTP/3 не сокращает время генерации HTML приложением. Кэш витрины также не ускорит персонализированную корзину.

Что делать, если истекло время ожидания ответа сервера?

Таймаут означает, что ожидание оборвалось. Определите, какая страница зависает, и проверьте вызовы 1С или внешнего API, а также логи веб-сервера и PHP. Если страница отвечает медленно, но загружается, ищите причину высокого TTFB отдельно.

Поделиться
ВКонтакте Telegram MAX
Рубрика статьи
Скорость, безопасность, хостинг
Ещё 42 статьи в рубрике →
Рядом в разделе

Расскажите о задаче — посчитаем смету

Ответьте на несколько вопросов: что за компания, какие разделы нужны, есть ли тексты и фотографии. Этого хватит, чтобы посчитать смету с фиксированной ценой и сроком — она бесплатна и ни к чему не обязывает.
Написать