DNS и производительность: оптимизация резолвинга
Влияние DNS на скорость загрузки
Каждый HTTP-запрос начинается с DNS-резолвинга — преобразования доменного имени в IP геолокацию. Этот процесс занимает от 20 до 120 мс, а при первом обращении к домену — до 200-300 мс. На странице с ресурсами из 10 разных доменов DNS-lookups могут добавить до 1-2 секунд к загрузке.
DNS-резолвинг — часто упускаемый из виду фактор производительности, который можно оптимизировать без изменения кода.
Как работает DNS-резолвинг
- Браузер проверяет свой DNS-кэш
- Если не найдено — запрос к ОС (hosts-файл, системный кэш)
- ОС обращается к рекурсивному резолверу (обычно ISP или public DNS)
- Резолвер проходит цепочку: root → TLD → авторитативный DNS-сервер
- Полученный IP-адрес кэшируется на каждом уровне согласно TTL
Используйте DNS Lookup на Enterno.io для проверки DNS Lookup и времени резолвинга вашего домена.
Выбор DNS-провайдера
Скорость авторитативного DNS-сервера напрямую влияет на время первого обращения. Публичные DNS-провайдеры с anycast-сетями обеспечивают время ответа 5-20 мс из любой точки мира.
Критерии выбора
- Anycast сеть — серверы в множестве точек присутствия (PoP) по всему миру
- Время ответа — менее 30 мс из ключевых регионов вашей аудитории
- Uptime — 100% SLA (DNS даунтайм = полная недоступность сайта)
- Поддержка DNSSEC — для защиты от DNS-спуфинга
- Поддержка современных типов записей — CAA, TLSA, SVCB
Популярные DNS-провайдеры
- Cloudflare DNS — бесплатный, быстрый, 300+ PoP
- AWS Route 53 — гибкая маршрутизация, latency-based routing
- Google Cloud DNS — 100% SLA, глобальная anycast-сеть
Оптимизация TTL
TTL (Time To Live) определяет, как долго DNS-запись кэшируется. Правильный TTL — баланс между производительностью и гибкостью.
Рекомендации по TTL
- Стабильные записи (MX, TXT, SPF) — 3600-86400 секунд (1 час — 1 день)
- Основной A/AAAA-запись — 300-3600 секунд (5 мин — 1 час)
- Перед миграцией — снизьте до 60-300 секунд за 24-48 часов
- После миграции — верните нормальный TTL через 24-48 часов
Слишком низкий TTL (менее 60 секунд) увеличивает нагрузку на DNS-серверы и замедляет резолвинг. Слишком высокий (более 86400) затрудняет оперативные изменения.
DNS Prefetch
DNS Prefetch — механизм предварительного резолвинга доменов, от которых загружаются ресурсы страницы:
<link rel="dns-prefetch" href="//cdn.example.com"> <link rel="dns-prefetch" href="//fonts.googleapis.com"> <link rel="dns-prefetch" href="//analytics.google.com">
Браузер выполняет DNS-lookup заранее, пока парсит HTML. Когда ресурс понадобится, IP-адрес уже будет в кэше.
Preconnect — шаг дальше
Для критических ресурсов используйте preconnect — он выполняет DNS + TCP + TLS handshake заранее:
<link rel="preconnect" href="https://cdn.example.com" crossorigin>
Используйте preconnect для 2-3 самых важных внешних доменов. Для остальных — dns-prefetch.
Минимизация DNS Lookups
Сокращайте количество доменов
Каждый уникальный домен требует отдельного DNS-lookup. Сократите количество внешних доменов:
- Разместите статику на основном домене или одном CDN-домене
- Сократите количество сторонних скриптов (аналитика, виджеты, рекламные сети)
- Используйте self-hosted шрифты вместо Google Fonts
Domain sharding — устаревшая техника
В эпоху HTTP/1.1 ресурсы разделяли по нескольким доменам для параллельных загрузок. С HTTP/2 это антипаттерн — мультиплексирование позволяет загружать всё через одно соединение. Дополнительные домены только добавляют DNS-lookups.
Мониторинг DNS
DNS-проблемы часто остаются незамеченными, потому что сайт «работает» для большинства пользователей (их DNS-кэш ещё актуален).
- Мониторьте время DNS-резолвинга из разных географических точек
- Настройте алерты на увеличение DNS lookup time
- Используйте DNS Lookup Enterno.io для регулярной проверки DNS-записей
- Настройте мониторинг uptime — он обнаружит проблемы с DNS, если они приводят к недоступности
Итоги
DNS-оптимизация — низко висящий фрукт, который можно собрать без изменения кода. Выберите быстрый DNS-провайдер с anycast, настройте правильные TTL, используйте dns-prefetch и preconnect для внешних доменов, и минимизируйте количество уникальных доменов на странице. Эти меры могут сэкономить 100-500 мс на каждой загрузке.
Проверьте ваш сайт прямо сейчас
Проверить →