Подтвердить что ты не робот

Каков наилучший способ измерения времени загрузки страницы на стороне клиента?

Я хочу отслеживать конечный пользовательский интерфейс нашего сайта и связывать его с информацией о времени, уже зарегистрированной на стороне сервера. Мое предположение заключается в том, что для регистрации временных меток в начале запроса потребуется javascript (window.onbeforeunload) и в конце загрузки (window.onload). В основном это - Измерение времени отклика веб-приложения: Встреча с клиентом"

  • Есть ли лучший подход?
  • Какое снижение производительности я должен ожидать (по порядку величины)?
  • Насколько хороши результаты?
4b9b3361

Ответ 1

EDIT (2013): попробуйте Boomerang, как это предлагает @yasei-no-umi. Он активно поддерживался.

- старый ответ -

Мы используем Jiffy.

Он очень прост в использовании и модификации - мы написали собственный серверный код (вместо Jiffy Apache + perl) и использовали Jiffy JS.

Относительно штрафа за производительность - на стороне клиента нет ни одного. Сам JS является тривиально быстрым, и отчетность на сервере может быть выполнена с помощью XHR после загрузки страницы, что ничем не влияет на работу пользователя. На стороне сервера вы получите в два раза больше запросов. Если это узкое место, вы можете настроить другой сервер только для ответов времени.

Ответ 2

Существует также Boomerang от Yahoo.

Есть некоторые дополнительные функции, не существующие в Jiffy и Episodes. Также поддерживайте API Navigation Timing в браузерах, которые его поддерживают (Chrome 6, IE 9)

Ответ 3

Для полноты использования теперь вы можете использовать API навигации навигации в некоторых браузерах современных: https://developer.mozilla.org/en-US/docs/Navigation_timing

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);
}

Редактирование третьей стороны

На основе время навигации по навигации caniuse.com широко поддерживается сегодня (10/2016)

Ответ 4

Как насчет использования чего-то вроде yslow (расширение firefox)?

Ответ 5

Альтернативой Jiffy является Episodes.

Оба включают в себя инструмент, позволяющий вашему Javascript отслеживать различные тайминги и регистрировать эти тайминги на центральном сервере.

Ответ 6

У нас есть "обратный вызов" (прозрачное GIF-изображение 1x1 с параметром, представляющим идентификатор для рендеринга страницы) на странице, которая регистрирует "Просмотр страницы" в нашей базе данных. Это записи с тем же идентификатором, что и сама страница, и у нас есть запись в журнале, когда наш рендеринг заканчивается.

Итак, у нас есть время:

  • Начата подготовка страницы.
  • Подготовка страницы/завершение ответа
  • Клиент звонил домой при завершении рендеринга

Помогает с пониманием клиентов, которые являются "медленными" (CPU или ISP/bandwidth)

P.S. Страницы, которые не звонят домой, тоже представляют интерес - пользователь щелкнул (при условии, что другая страница, отображаемая на этом сеансе, записала домашний телефон)

Ответ 7

Я довольно сомневаюсь в этих методах. Некоторые из этих методов более сложны, чем необходимо, и я сомневаюсь в точности этих данных. То, что я сделал бы, это тестеры, которые идут в разные сети и используют что-то вроде Firebug или что-то в этом роде:

http://getfirebug.com/

За черт его; вот интересная статья, недавно представленная SOSP на инструменте под названием AjaxScope. Интересно, что это научная статья, представленная MS Research, которая показывает, что реализация Firefox Javascript выполняется в несколько раз лучше, чем Internet Explorer, в нескольких случаях.:)

http://research.microsoft.com/en-us/groups/rad/sosp07.pdf

Ответ 8

Мы склонны использовать комбинацию:

Firefox: Панель инструментов веб-разработчиков Firebug YSlow

IE: Fiddler

Из всех этих я обнаружил, что YSlow дает лучшую информацию о том, что вы можете сделать, чтобы улучшить время загрузки, но Fiddler дает лучшую общую информацию о том, что вы можете ожидать по кабелю, и может даже моделировать разные скорости сети.