Руководства

Высокая задержка: почему сайт медленный для части пользователей

Высокая задержка: почему сайт медленный для части пользователей

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

Как отличить задержку от медленного сервера

Если тормозит сам сервер, медленно становится всем: и вам, и клиентам, и мониторингу. Время ответа растёт одинаково из любой точки. Если всё быстро у вас и медленно у части людей — это почти всегда сеть.

Быстрая проверка — попросить пожаловавшегося пользователя выполнить у себя одну команду (Windows 10 и новее, macOS, Linux):

curl -o NUL -s -w "Connect: %{time_connect}\nTLS: %{time_appconnect}\nTTFB: %{time_starttransfer}\nTotal: %{time_total}\n" https://example.com/

В Windows команду запускают в обычной командной строке (cmd); в PowerShell вместо curl нужно писать curl.exe. В macOS и Linux вместо NUL пишется /dev/null.

Если Connect у него 0,15 с, а у вас 0,02 — дело в расстоянии или маршруте. Если и у вас, и у него большой только TTFB — тормозит сервер, и тогда вам в статью «Как ускорить сайт на VPS».

Почему 100 мс превращаются в секунду

Задержка (RTT) — время, за которое пакет доходит до сервера и обратно. Сама по себе 100–150 мс выглядит мелочью. Но страница не загружается за один обмен: прежде чем браузер получит первый байт, он несколько раз сходит туда и обратно.

ЭтапОбменовПри 20 мсПри 150 мс
DNS-запрос (если не в кэше)120 мс150 мс
TCP-соединение120 мс150 мс
TLS (HTTPS), версия 1.3120 мс150 мс
Запрос и первый байт ответа120 мс150 мс
До первого байта480 мс600 мс

И это только HTML. Потом браузер видит стили, скрипты, шрифты, счётчики — и если часть из них лежит на других доменах, на каждый домен снова платятся DNS, TCP и TLS. Страница с десятком сторонних ресурсов на дальнем расстоянии легко набирает 3–5 секунд, хотя сервер отвечает за 50 мс.

Отсюда главный вывод: с задержкой борются не ускорением сервера, а сокращением числа обменов и расстояния.

Как измерить, где теряется время

mtr — маршрут и потери

mtr объединяет ping и traceroute: показывает каждый узел по дороге, задержку и потери на нём. Пользователь в Windows может поставить WinMTR, в Linux и macOS — пакет mtr:

mtr -rwc 100 example.com

Сто пакетов дают устойчивую статистику. Как читать отчёт:

  • Задержка резко прыгает на одном узле и дальше держится — это и есть «длинный» участок: часто трансграничный стык или крюк через другую страну. Пример: пакеты из Москвы в Хельсинки идут через Франкфурт — и 25 мс превращаются в 60.
  • Потери на промежуточном узле, но не на последнем — обычно не проблема: роутеры отвечают на диагностические пакеты с низким приоритетом.
  • Потери на последнем узле (на вашем сервере) — реальные потери. Даже 1–2% заметно замедляют HTTPS: потерянные пакеты отправляются заново с паузой.
  • Большой разброс (столбцы Best и Wrst отличаются в разы) — нестабильный канал, чаще всего мобильная сеть или перегруженный Wi-Fi у пользователя.

Полезно запустить mtr и в обратную сторону — с сервера до IP пользователя: маршруты туда и обратно бывают разными.

Проверка из многих точек

Сервисы вроде check-host.net и ping.pe измеряют задержку и доступность сайта из десятков городов одновременно, в том числе из разных регионов России. Так видно, у кого проблема — у одного провайдера, у целого региона или у всех за пределами Европы.

Данные реальных посетителей

Самая честная картина — от реальных пользователей. Счётчики аналитики показывают время загрузки по регионам и типам устройств; если медленно только в одном регионе или только на мобильных, это сразу видно. Подойдёт и простой скрипт, который отправляет на сервер данные Navigation Timing из браузера.

Частые причины

Что видноПричинаЧто делать
Медленно всем в далёком регионеРасстояние до сервераКэш и CDN для статики, меньше обменов; при большой доле аудитории — сервер ближе
Медленно абонентам одного провайдераПлохой маршрут или перегруженный стык у этого провайдераmtr от пользователя, обращение к провайдеру; иногда помогает другая локация сервера
Медленно на мобильном интернетеПотери и разброс задержки в сотовой сетиОблегчить страницу, меньше доменов и запросов
Страница «висит», а потом догружаетсяСторонний ресурс недоступен или замедлен у пользователяНайти его во вкладке «Сеть» браузера, перенести файлы к себе
Медленно только у части, у кого есть IPv6Маршрут по IPv6 хуже, чем по IPv4Проверить mtr -6; если плохо — исправлять или временно не публиковать AAAA
Медленно всем, включая васСервер, а не сетьСмотреть TTFB, нагрузку, базу

Отдельно о сторонних ресурсах для аудитории из России

Частый случай последних лет: сайт на сервере в Европе работает нормально, а страница у российских пользователей «застревает». Причина — ресурсы на чужих доменах, доступ к которым у российских провайдеров ограничен или замедлен. Например, с 9 июня 2025 года российские провайдеры ограничивают трафик к сайтам за Cloudflare: по данным самой Cloudflare, проходят только первые 16 КБ ответа, поэтому крупные страницы и файлы не догружаются. То же касается шрифтов, скриптов и виджетов, которые подключены с внешних CDN.

Что делать: откройте страницу в браузере с российским подключением, вкладка «Сеть» покажет запросы, которые висят или обрываются. Шрифты, библиотеки и картинки перенесите на свой сервер, а если сайт работает через иностранный CDN или защиту от атак — проверьте, как он открывается из России, и при необходимости переключите домен на прямую работу с сервером.

Что помогает

1. Меньше обменов на каждую страницу

  • HTTP/2 и keep-alive — все ресурсы идут по одному соединению, TCP и TLS оплачиваются один раз. Как включить — в статье «Как ускорить сайт на VPS».
  • TLS 1.3 — на одно рукопожатие меньше, чем у 1.2. В Nginx: ssl_protocols TLSv1.2 TLSv1.3;
  • Меньше чужих доменов. Каждый новый домен — это DNS, TCP и TLS заново. Шрифты, скрипты, иконки лучше отдавать со своего сервера.
  • Для неизбежных сторонних доменов — подсказка браузеру установить соединение заранее: <link rel="preconnect" href="https://cdn.example.net">.

2. Кэш и CDN

Статика с правильными заголовками кэширования при повторном визите вообще не запрашивается. CDN отдаёт картинки, стили и скрипты с узла рядом с пользователем, а сервер остаётся один. Для российской аудитории выбирайте CDN, у которого есть узлы в России и который нормально доступен российским провайдерам.

3. Приложение, которое уважает расстояние

Если интерфейс делает двадцать запросов к API один за другим, каждый платит полную задержку: при 130 мс это почти три секунды ожидания при мгновенном сервере.

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

4. Сервер ближе к пользователям

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

Ориентиры по задержке из России до наших площадок:

АудиторияПлощадкаЗадержка из РФ
Россия, СНГРоссия (Москва, Санкт-Петербург)1–10 мс
Россия, северо-запад, ЕвропаФинляндия (Хельсинки)20–40 мс
Вся ЕвропаНидерланды (Амстердам)40–60 мс
Казахстан, Средняя АзияКазахстан (Алматы)50–80 мс
Северная АмерикаСША (Нью-Йорк, Лос-Анджелес)100–150 мс

Перед переездом проверьте на практике: возьмите младший тариф в новой локации на месяц и попросите тех, у кого медленно, прогнать mtr до нового IP.

Start в Финляндии — $10/мес   Start в Казахстане — $10/мес   Start в США — $10/мес

Цены указаны на момент публикации, оплата у провайдера.

Что не поможет

  • Более мощный процессор. Он ускоряет обработку, но не дорогу. Если сервер отвечает за 10 мс, а дорога занимает 130, ускорение сервера вдвое сэкономит 5 мс из 140.
  • Более широкий канал. Скорость определяет, сколько данных пройдёт за секунду, а не как быстро придёт первый ответ.
  • Перезагрузка сервера и смена тарифа при проблеме у одного провайдера пользователя: маршрут от этого не изменится.

Коротко

  • Медленно только части пользователей — почти всегда сеть, а не сервер. Сравните Connect и TTFB у вас и у них.
  • Задержка умножается на число обменов: при 150 мс до первого байта уходит около 0,6 с.
  • Ищите проблемный участок через mtr и проверки из многих точек.
  • Для аудитории из России проверьте сторонние ресурсы и иностранные CDN: часть из них замедляется провайдерами.
  • Помогают HTTP/2, TLS 1.3, меньше доменов, кэш, CDN и приложение без цепочек запросов; радикально — сервер ближе к аудитории.