Web Vitals предоставляет набор метрик для измерения
производительности и пользовательского опыта веб-страниц. Одной из
ключевых задач является понимание, какие этапы загрузки ресурса занимают
наибольшее время. Поля waitingDuration,
dnsDuration, connectionDuration и
requestDuration позволяют анализировать сетевое
взаимодействие и узкие места в обработке HTTP-запросов.
dnsDurationdnsDuration измеряет время, затраченное на разрешение
доменного имени в IP-адрес через систему DNS.
Особенности:
Измеряется в миллисекундах.
Включает только чистое время резолвинга имени, не учитывает задержки на сетевом канале или обработку HTTP.
Полезно для выявления проблем с DNS-серверами, медленной маршрутизацией или ненадежной инфраструктурой провайдера.
Если dnsDuration слишком велико, возможны
оптимизации через:
).Пример получения значения через Performance API:
const [resource] = performance.getEntriesByType('resource');
console.log(resource.domainLookupEnd - resource.domainLookupStart); // dnsDuration
connectionDurationconnectionDuration отражает время, затраченное на
установление TCP-соединения, включая возможный TLS handshake при
HTTPS.
Особенности:
Считается как разница между connectEnd и
connectStart в объекте
PerformanceResourceTiming.
Включает:
Высокие значения могут указывать на:
Пример расчета:
const [resource] = performance.getEntriesByType('resource');
const connectionDuration = resource.connectEnd - resource.connectStart;
console.log(connectionDuration);
requestDurationrequestDuration измеряет время, затраченное на отправку
запроса и получение первого байта ответа от сервера.
Особенности:
Включает:
TTFB).Основная метрика для оценки производительности серверной части.
Высокие значения могут быть следствием:
Пример использования:
const [resource] = performance.getEntriesByType('resource');
const requestDuration = resource.responseStart - resource.requestStart;
console.log(requestDuration);
waitingDurationwaitingDuration — это время, которое клиент тратит на
ожидание ответа после отправки запроса, до получения полного ответа.
Особенности:
Часто воспринимается как совокупный показатель времени ожидания сервера.
Рассчитывается как разница между responseStart и
requestStart.
Полезно для анализа:
const [resource] = performance.getEntriesByType('resource');
const waitingDuration = resource.responseStart - resource.requestStart;
console.log(waitingDuration);
Для интеграции с библиотекой Web Vitals можно использовать события
onPerfEntry или прямой доступ к
PerformanceResourceTiming.
Пример анализа сетевых этапов:
import { getLCP } from 'web-vitals';
getLCP((metric) => {
const resource = performance.getEntriesByName(metric.entries[0].name)[0];
const dnsDuration = resource.domainLookupEnd - resource.domainLookupStart;
const connectionDuration = resource.connectEnd - resource.connectStart;
const requestDuration = resource.responseStart - resource.requestStart;
const waitingDuration = resource.responseStart - resource.requestStart;
console.table({ dnsDuration, connectionDuration, requestDuration, waitingDuration });
});
Эти данные позволяют строить детализированные отчёты о производительности и выявлять узкие места на уровне сетевого взаимодействия, до того как они начнут влиять на опыт пользователей.
dnsDuration и connectionDuration
преимущественно сетевые и инфраструктурные показатели.requestDuration и waitingDuration отражают
как сетевые, так и серверные аспекты.PerformanceResourceTiming.