Как я могу контролировать время рендеринга в браузере?

Я работаю над внутренней корпоративной системой с веб-интерфейсом, используя Tomcat.

  1. Как я могу отслеживать время рендеринга определенных страниц в браузере (IE6)?
  2. Я хотел бы иметь возможность записывать результаты в файл журнала (отдельный файл журнала или журнал доступа Tomcat).

РЕДАКТИРОВАТЬ: В идеале мне нужно следить за рендерингом клиентов, обращающихся к страницам.


person adpd    schedule 25.03.2010    source источник
comment
Знаете ли вы Fiddler (fiddler2.com/fiddler2/version.asp)?   -  person XpiritO    schedule 25.03.2010
comment
Fiddler может измерять время, необходимое для выполнения запроса и его передачи клиенту, но если на сайте много или много javascript, будет дополнительная задержка, пока браузер обрабатывает DOM и javascript. Это особенно верно для IE6.   -  person driis    schedule 25.03.2010
comment
Кроме того, Скрипач испортил мою систему. Я бы не стал устанавливать его на свою машину.   -  person Nathan Osman    schedule 25.03.2010


Ответы (6)


Если в браузере включен JavaScript, вы можете написать встроенный скрипт и отправить его первым делом в своем HTML. Скрипт будет делать две вещи:

  1. Запишите текущее системное время в JS-переменную (если повезет, время может примерно соответствовать времени начала отрисовки страницы).
  2. Прикрепите JS-функцию к событию onLoad страницы. Затем эта функция снова запросит текущее системное время, вычтет время начала из шага 1 и отправит его на сервер вместе с местоположением страницы (или каким-либо уникальным идентификатором, который вы можете динамически вставить во встроенный скрипт на вашем сервере).
<script language="JavaScript">
var renderStart = new Date().getTime();
window.onload=function() { 
   var elapsed = new Date().getTime()-renderStart;
   // send the info to the server 
   alert('Rendered in ' + elapsed + 'ms'); 
} 

</script>

... usual HTML starts here ...

Вам нужно убедиться, что страница не переопределяет загрузку позже в коде, а вместо этого добавляется в список обработчиков событий.

person Vlad Gudim    schedule 25.03.2010
comment
+1 - Похоже, это то, что я сейчас имею в виду. Приятно получить подтверждение этой линии мышления. Кто-нибудь думает, что это неправильный подход? - person adpd; 25.03.2010
comment
Сейчас это устарело. Это было лучшее, что вы могли сделать в 2010 году, но в 2012 году большинство браузеров поддерживают спецификацию W3C Performance Timing, и это гораздо лучший способ получить эту информацию. - person Thaeli; 12.04.2012
comment
Это не работает. Он измеряет время, пока все загружается, но не отображается. Попробуйте создать большой SVG. Событие onload срабатывает, когда известен размер изображения SVG, но пользователь может не видеть изображение в течение некоторого времени, пока оно не будет отрисовано. - person Josef Kufner; 16.04.2017

Navigation Timing API доступен в современных браузерах (IE9+), кроме Safari:

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);
}
person Brian Low    schedule 23.09.2014

Что касается неинвазивных методов, то Hammerhead измеряет полное время загрузки (включая выполнение JavaScript), хотя и в Только фаерфокс.

Я видел полезные результаты, когда фрагмент JavaScript можно было добавить глобально, чтобы измерить начало и конец каждой операции загрузки страницы.

person Tomislav Nakic-Alfirevic    schedule 25.03.2010

Взгляните на Selenium — они предлагают удаленное управление, которое может автоматически запускать разные браузеры (например, IE6), загружать страницы, тест для определенного контента на странице. В конце генерируются отчеты, которые также показывают время рендеринга.

person pitpod    schedule 25.03.2010

Поскольку другие публикуют ответы, которые используют другие браузеры, думаю, я тоже буду. Chrome имеет очень подробную систему профилирования, которая разбивает время рендеринга страницы и показывает время, которое потребовалось для каждого шагать по пути.

Что касается IE, вы можете подумать о написании плагина. Похоже, что на рынке мало таких инструментов. Может быть, вы могли бы продать его.

person Nathan Osman    schedule 25.03.2010
comment
Я согласен с (слишком) небольшим количеством инструментов для IE на рынке. Написание плагина может быть неплохой идеей. Я могу взглянуть на тот. Спасибо за предложение по Chrome, но на клиентских машинах пока должен работать IE6, так как это корпоративная ИТ-политика. Когда выйдет обновление, это точно будет IE7 или IE8. Если бы у меня была роскошь других браузеров... - person adpd; 25.03.2010

В Firefox вы можете использовать Firebug для контроля времени загрузки. С помощью плагина YSlow вы даже можете получить рекомендации по улучшению производительности.

person Zoltan    schedule 01.04.2010