Navigation Timing API
Navigation Timing API предоставляет данные, которые могут быть использованы для измерения производительности веб-сайта. В отличие от других механизмов на основе JavaScript, которые были использованы с той же целью, этот API может предоставить полную и точную информацию о задержке в получении данных.
Следующий пример демонстрирует как можно измерить время загрузки страницы с точки зрения пользователя:
function onLoad() {
  var now = new Date().getTime();
  var page_load_time = now - performance.timing.navigationStart;
  console.log("User-perceived page loading time: " + page_load_time);
}
Есть много событий, измеренных в миллисекундах, которые могут быть доступны через PerformanceTiming интерфейс. Список событий в хронологическом порядке:
- navigationStart
 - unloadEventStart
 - unloadEventEnd
 - redirectStart
 - redirectEnd
 - fetchStart
 - domainLookupStart
 - domainLookupEnd
 - connectStart
 - connectEnd
 - secureConnectionStart
 - requestStart
 - responseStart
 - responseEnd
 - domLoading
 - domInteractive
 - domContentLoadedEventStart
 - domContentLoadedEventEnd
 - domComplete
 - loadEventStart
 - loadEventEnd
 
Объект window.performance.navigation хранит два атрибута, которые могут быть использованы, для определения была ли страница загружена в последствии перенаправления, использования навигации по страницам в браузере или обычной загрузки по ссылке.
window.performance.navigation.type:
| Флаг | Значение | Описание | 
|---|---|---|
TYPE_NAVIGATE | 
0 | Навигация началась после нажатия на ссылку, ввода URL в адресную строку браузера, подтверждения формы или после выполнения действия, отличного от действий описанных в флагах TYPE_RELOAD и TYPE_BACK_FORWARD. | 
TYPE_RELOAD | 
1 | Навигация путём перегрузки страницы или выполнения метода location.reload(). | 
TYPE_BACK_FORWARD | 
2 | Навигация по истории переходов по страницам в браузере. | 
TYPE_UNDEFINED | 
255 | Любой другой тип навигации не описанный выше. | 
window.performance.navigation.redirectCount отображает количество переадресаций до последней страницы, если они происходили.
Navigation Timing API может быть использован для сбора данных о производительности на стороне клиента при отправке асинхронных запросов на сервер, а также для получения данных, которые нельзя получить с помощью других средств, таких как время выгрузки предыдущей страницы, время DNS запроса, время полной загрузки страницы.
Примеры
Вычисление времени полной загрузки страницы:
var perfData = window.performance.timing; var pageLoadTime = perfData.loadEventEnd - perfData.navigationStart;
Вычисление времени выполнения запроса:
var connectTime = perfData.responseEnd - perfData.requestStart;