В HTML5 есть удобное средство профилирования клиентский событий – User Timing API. Это набор Javascript функций, с помощью которых можно определять события и время, которое проходит между ними.
API работает со специальным форматом времени High Resolution Time. Этот формат позволяет отслеживать время до долей микросекунд. Функция now() позволяет вывести время, которое прошло с момента события “navigationStart” (время начала загрузки документа):
console.log(window.performance.now());
Для профилирования событий User Timing API предоставляет две функции:
Функция mark позволяет отмечать временные точки и связывать их с названием:
window.performance.mark('событие началось');
## Отмечаем начало какого-то события
Это базовая функция, с помощью которой Вы отмечаете все события, которые хотите измерить. На практике это может выглядеть так:
window.performance.mark('событие началось');
$.post('/post', function() {
window.performance.mark('событие закончилось');
# ...
});
Функция measure покажет время, которое прошло между двумя отмеченным событиями:
window.performance.measure('длительность AJAX запроса', 'событие началось', 'событие закончилось');
После того, как Вы добавили необходимые отметки и измерения, Вы можете получить сохраненную информацию:
var marks = window.performance.getEntriesByType('mark');
console.log(marks);
## Выведет в консоль все отметки
Консоль покажет нам:
[ { duration: 0 entryType: "mark" name: "событие началось" startTime: 131154.89599993452 __proto__: PerformanceMark } , { duration: 0 entryType: "mark" name: "событие закончилось" startTime: 135179.0579999797 __proto__: PerformanceMark } ]
Чтобы вывести все измерения:
var measures = window.performance.getEntriesByType('measure');
console.log(measures);
## Выведет в консоль все измерения между отметками
В этом случае в консоли увидим:
{ duration: 3351.0539999697357 entryType: "measure" name: "длительность AJAX запроса" startTime: 47443.45400005113 __proto__: PerformanceMeasure }
Вы можете использовать стандартные события (отметки) в измерениях, которые определены всегда:
Начало загрузки документа.
Время перед событием unload предыдущего документа.
Время окончания события unload предыдущего документа.
Время начала первого перенаправления страницы, если используется редирект.
Время получения последнего байта последнего редиректа, если он есть.
Время начала получения ресурса (либо начало проверки клиентского кеша).
Время начала поиска домена.
Время окончания поиска домена.
Время начала установки соединения для получения документа.
Время окончания установки соединения для получения документа.
Время начала процедуры handshake при безопасном соединении.
Время начала отправки запроса на сервер.
Время окончания получения документа (время сразу после получения последнего байта).
Время установки статуса DOM в “loading”.
Время установки статуса DOM в “interactive”.
Время запуска Javascript события “DOMContentLoaded”.
Время окончания Javascript события “DOMContentLoaded”.
Время установки статуса DOM в “complete”.
[ad]
Время начала Javascript события “load”.
Время окончания Javascript события “load”.
Определим время, которое прошло с начала поиска домена и до окончания загрузки страницы:
window.performance.measure('DNS to complete', 'domainLookupStart', 'loadEventEnd');
console.log(window.performance.getEntriesByName('DNS to complete')[0]);
Для примера проведем профилирование запроса на VK API:
window.performance.mark('VK getProfiles start');
VK.Api.call('getProfiles', {uids: 1}, function(r) {
window.performance.mark('VK getProfiles finish');
window.performance.measure('VK getProfiles length', 'VK getProfiles start', 'VK getProfiles finish');
console.log('VK getProfiles duration:' + window.performance.getEntriesByName('VK getProfiles length')[0].duration);
# ...
});
## Тут мы выводим длительность запроса к API сразу после его завершения
Чтобы постоянно не делать кучу одинаковых вызовов, воспользуйтесь таким компонентом:
var ut_tracker = {
start: function(name)
{
window.performance.mark(name + ' start');
},
end: function(name)
{
window.performance.mark(name + ' end');
},
measure: function(name)
{
window.performance.measure(name + ' measure', name + ' start', name + ' end');
return window.performance.getEntriesByName(name + ' measure')[0];
}
}
Пример с VK выглядел бы так:
**ut_tracker.start('VK getProfiles');**
VK.Api.call('getProfiles', {uids: 1}, function(r) {
**ut_tracker.end('VK getProfiles');**
console.log('VK getProfiles duration:' + **ut_tracker.measure('VK getProfiles').duration**);
# ...
});
User Timing API в HTML5 – простой инструмент для профилирования клиентских событий с большой точностью. Используйте компонент ut_tracker для удобства.
Прокси (proxy), или прокси-сервер — это программа-посредник, которая обеспечивает соединение между пользователем и интернет-ресурсом. Принцип…
Согласитесь, было бы неплохо соединить в одно сайт и приложение для смартфона. Если вы еще…
Повсеместное распространение смартфонов привело к огромному спросу на мобильные игры и приложения. Миллиарды пользователей гаджетов…
В перечне популярных чат-ботов с искусственным интеллектом Google Bard (Gemini) еще не пользуется такой популярностью…
Скрипт (англ. — сценарий), — это небольшая программа, как правило, для веб-интерфейса, выполняющая определенную задачу.…
Дедлайн (от англ. deadline — «крайний срок») — это конечная дата стачи проекта или задачи…