Как работает _gaq.push (['_ trackPageLoadTime'])?

102

Как работает функция Google Analytics Site Speed _gaq.push(['_trackPageLoadTime'])? Есть ли документация о том, как это работает?

Ильхан
источник
2
@ stuken.yuri - это синтаксис для асинхронного вызова Google Analytics. В основном это означает: добавить функцию (имя) _trackPageLoadTimeв очередь, а затем последовательно запустить все функции в этой очереди после загрузки ga.js. Это позволяет безопасно загружать ga.jsфайлы асинхронно.
Yahel

Ответы:

181

Edit : По состоянию на 16 ноября 2011 года функция устарела и ее функциональность была установлена в качестве настройки по умолчанию . (С функциональной точки зрения, она превратилась из функции выбора в функцию отказа.)_trackPageLoadTime

_setSiteSpeedSampleRateэто новая функция для установки частоты дискретизации для этой функции; его значение по умолчанию 1(как в 1%). Чтобы отказаться от использования этой функции Site Speed, вы должны передать 0этой функции:

_gaq.push(["_setSiteSpeedSampleRate", 0]);

В Справочном центре Google Analytics :

В настоящее время этот отчет поддерживает следующие браузеры: Chrome, Internet Explorer 9 и предыдущие версии Internet Explorer с установленной панелью инструментов Google. В частности, для отчетов о скорости загрузки сайта требуются браузеры, поддерживающие интерфейс HTML5 NavigationTiming, или с установленной панелью инструментов Google Internet Explorer.

Таким образом, он не реализует свой собственный таймер, как многие предыдущие решения Homeback, чтобы выяснить, сколько времени требуется для загрузки страницы. Вместо этого он использует новую функцию HTML5, которая в настоящее время поддерживается только в перечисленных выше случаях, и называется NavigationTiming.

РЕДАКТИРОВАТЬ : теперь это поддерживается в Firefox 7

(Важно отметить , что она не запускается при каждой загрузке, вместо этого, он в настоящее время образцы около 2% от просмотров страниц, хотя он настроен на пытаться отслеживать все загрузки страницы на 10% посещения, так как все больше браузеров поддерживают API NavigationTiming, можно ожидать, что общий процент выборки начнет приближаться к 10%.)

Доступ к этому интерфейсу осуществляется из объекта DOM window.performance(или, в более ранних версиях Chrome window.webkitPerformance), с помощью timingатрибута (so, window.performance.timing). В объекте хранятся измеренные значения времени всех событий загрузки ключевых страниц, а Google Analytics вычитает 2 из наиболее важных внешних значений, чтобы оценить скорость загрузки страницы.

Для загрузки Mashable.com без кеша вот пример того, что он измеряет (в Chrome 11):

timing = {
  connectEnd: 1306677079337,
  connectStart: 1306677079337,
  domComplete: 1306677083482,
  domContentLoadedEventEnd: 1306677081765,
  domContentLoadedEventStart: 1306677081576,
  domInteractive: 1306677081576,
  domLoading: 1306677079478,
  domainLookupEnd: 1306677079337,
  domainLookupStart: 1306677079337,
  fetchStart: 1306677079337,
  loadEventEnd: 1306677083483,
  loadEventStart: 1306677083482,
  navigationStart: 1306677079337,
  redirectEnd: 0,
  redirectStart: 0,
  requestStart: 1306677079394,
  responseEnd: 1306677079669,
  responseStart: 1306677079476,
  secureConnectionStart: 0,
  unloadEventEnd: 0,
  unloadEventStart: 0
}

Эти числа представляют собой миллисекунды эпох или миллисекунды с 1 января 1970 года. Я не видел никакой документации относительно того, какие значения они вычитают для генерации своих значений, но при беглом просмотре ga.js , похоже, что это loadEventStart-fetchStart:

h&&h[c]!=k&&h.isValidLoadTime?b=h[c]:e&&e[a]&&(b=e[a].loadEventStart-e[a].fetchStart);

Для приведенного выше примера это означает, что в вызове будет записано 4,14 секунды_trackPageLoadTime .

Из спецификации W3C Navigation Timing:

атрибут fetchStart

Если новый ресурс должен быть получен с помощью HTTP GET или аналогичного, fetchStart должен возвращать время непосредственно перед тем, как пользовательский агент начнет проверку любых соответствующих кешей приложений. В противном случае он должен вернуть время, когда пользовательский агент начинает выборку ресурса.

атрибут loadEventStart

Этот атрибут должен возвращать время непосредственно перед запуском события загрузки текущего документа. Он должен возвращать ноль, если событие загрузки еще не запущено.

Для любопытных вечеринок порядок выглядит следующим образом:

connectStart, connectEnd, domainLookupStart, domainLookupEnd, fetchStart, navigationStart, requestStart, responseStart, domLoading, responseEnd, domContentLoadedEventStart, domInteractive, domContentLoadedEventEnd, domComplete, loadEventStart, loadEventEnd

Для перечисленных 0 значений:

unloadEventStartи unloadEventStartпоказать время выгрузки предыдущей загрузки страницы (но только если эта страница имеет то же происхождение, что и текущая).

redirectEndи redirectStartизмерить добавленную задержку, если в цепочке загрузки страницы было перенаправление HTTP.

secureConnectionStart является необязательной мерой для измерения времени SSL-соединения.

Yahel
источник
6
Ты крутой чувак, серьезно. Спасибо за такой подробный ответ.
Сид
secureConnectionStart- это стандартное измерение, но для браузера (или того, что обрабатывает контент), отчет не является обязательным. w3c-test.org/webperf/specs/NavigationTiming/…
Эрик,