Измерение времени сервера
Server-Timing — это часть API производительности, которая позволяет серверам передавать данные о цикле запроса-ответа клиенту. Вы можете собирать эту информацию и реагировать на показатели на стороне сервера аналогично обработке других показателей с помощью API производительности.
Отправка показателей сервера
Заголовок HTTP Server-Timing используется для передачи показателей времени сервера. Например, вы можете отправлять время операций чтения/записи в базе данных, время работы процессора и время доступа к файловой системе.
Вы можете отправлять метрики с или без значений. Метрики могут необязательно содержать описание. Рекомендуется сохранять имена, описания и данные максимально короткими для минимизации накладных расходов HTTP.
Примеры заголовков Server-Timing:
// Single metric without value Server-Timing: missedCache // Single metric with value Server-Timing: cpu;dur=2.4 // Single metric with description and value Server-Timing: cache;desc="Cache Read";dur=23.2 // Two metrics with values Server-Timing: db;dur=53, app;dur=47.2 // Server-Timing as trailer Trailer: Server-Timing --- response body --- Server-Timing: total;dur=123.4
Для расчета реальных показателей производительности на стороне сервера, обратитесь к документации вашего серверного CMS, фреймворка или языка программирования, чтобы узнать, как измерять производительность в приложении на стороне сервера. Если ваш сервер использует Node.js, API измерения производительности будут очень похожи на API производительности в браузерах. Это потому, что модуль производительности Node.js является подмножеством W3C API производительности веб-приложений, а также дополнительных API для измерения производительности, специфичных для Node.js. Для получения дополнительной информации см. документацию по производительности Node.js.
Обратите внимание, что нет синхронизации часов между сервером, клиентом и промежуточными прокси-серверами. Это означает, что если ваш сервер отправляет метки времени или startTime, значение может не соответствовать значениям startTime временной шкалы клиента.
После того, как вы рассчитали нужные метрики, сервер должен отправить заголовок Server-Timing в ответе. См. страницу справки Server-Timing для примера отправки заголовка в Node.js.
Получение показателей сервера
Показатели времени сервера обычно отображаются в инструментальных средствах разработчика браузера, но они также хранятся в виде записей производительности PerformanceServerTiming, к которым вы можете получить доступ, как и к другим данным производительности данным производительности. Однако, собственных записей "server-timing" нет. Объекты PerformanceServerTiming наблюдаются из записей производительности "navigation" и "resource". Доступ к показателям сервера осуществляется через свойство PerformanceResourceTiming.serverTiming, которое представляет собой массив объектов PerformanceServerTiming.
Учитывая заголовок Server-Timing такого вида:
Server-Timing: cache;desc="Cache Read";dur=23.2,db;dur=53,app;dur=47.2
Программа PerformanceObserver может регистрировать записи на стороне клиента с помощью следующего кода:
const observer = new PerformanceObserver((list) => {
list.getEntries().forEach((entry) => {
entry.serverTiming.forEach((serverEntry) => {
console.log(
`${serverEntry.name} (${serverEntry.description}) duration: ${serverEntry.duration}`,
);
// Logs "cache (Cache Read) duration: 23.2"
// Logs "db () duration: 53"
// Logs "app () duration: 47.2"
});
});
});
["navigation", "resource"].forEach((type) =>
observer.observe({ type, buffered: true }),
);
Соображения конфиденциальности и безопасности
Заголовок Server-Timing может раскрывать потенциально конфиденциальную информацию об приложении и инфраструктуре. Поэтому необходимо контролировать, когда метрики возвращаются и кому на стороне сервера. Например, вы можете показывать метрики только авторизованным пользователям и не показывать публике.
Интерфейс PerformanceServerTiming ограничен тем же происхождением, но вы можете использовать заголовок Timing-Allow-Origin для указания доменов, которым разрешен доступ к метрикам сервера. Также обратите внимание, что этот интерфейс доступен только в защищённых контекстах (HTTPS) в некоторых браузерах.
© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/Performance_API/Server_timing