Jak działa _gaq.push (['_ trackPageLoadTime'])?

102

Jak działa funkcja Google Analytics Site Speed,, _gaq.push(['_trackPageLoadTime'])? Czy jest jakaś dokumentacja na temat tego, jak to działa?

ilhan
źródło
2
@ stuken.yuri to składnia wywołania asynchronicznego Google Analytics. Zasadniczo oznacza to: dodaj funkcję (nazwę) _trackPageLoadTimedo kolejki, a następnie uruchom wszystkie funkcje w tej kolejce sekwencyjnie po załadowaniu ga.js. Pozwala na bezpieczne ładowanie ga.jsasynchroniczne.
Yahel

Odpowiedzi:

181

Edycja : od 16 listopada 2011 r . _trackPageLoadTimeFunkcja została wycofana, a jej funkcjonalność została ustawiona jako ustawienie domyślne . (Mówiąc funkcjonalnie, z funkcji opt-in stała się funkcją opt-out).

_setSiteSpeedSampleRateto nowa funkcja do ustawiania częstotliwości próbkowania tej funkcji; jego domyślna wartość to 1(jak w 1%). Aby zrezygnować z korzystania z tej funkcji Szybkość witryny, musisz przekazać 0tę funkcję:

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

Z Centrum pomocy Google Analytics :

Ten raport obsługuje obecnie następujące przeglądarki: Chrome, Internet Explorer 9 i poprzednie wersje Internet Explorera z zainstalowanym paskiem narzędzi Google Toolbar. Mówiąc dokładniej, raporty dotyczące szybkości witryny wymagają przeglądarek obsługujących interfejs czasu nawigacji HTML5 lub z zainstalowanym paskiem narzędzi Google Internet Explorer

Nie implementuje więc własnego licznika czasu, jak miało to miejsce w przypadku wielu wcześniejszych rozwiązań homeback, aby dowiedzieć się, jak długo trwa ładowanie strony. Zamiast tego używa nowej funkcji HTML5, obecnie obsługiwanej tylko w wyżej wymienionych przypadkach, zwanej NavigationTiming.

EDYCJA : To jest teraz obsługiwane w przeglądarce Firefox 7

(Należy pamiętać, że nie uruchamia się przy każdym ładowaniu; zamiast tego obecnie próbkuje około 2% odsłon, chociaż jest skonfigurowany tak, aby próbować śledzić wszystkie wczytania stron przy 10% odwiedzin; ponieważ więcej przeglądarek obsługuje interfejs NavigationTiming API, można oczekiwać, że całkowity procent próbkowania zacznie zbliżać się do 10%).

Dostęp do tego interfejsu uzyskuje się w ramach obiektu DOM window.performance(lub we wcześniejszych wersjach Chrome window.webkitPerformance) za pomocą timingatrybutu (tak, window.performance.timing). Obiekt przechowuje zmierzone wartości wszystkich kluczowych czasów ładowania strony, a Google Analytics odejmuje 2 z ważniejszych wartości zewnętrznych, aby ocenić szybkość ładowania strony.

W przypadku obciążenia witryny Mashable.com bez pamięci podręcznej, oto przykład tego, co mierzy (w przeglądarce 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
}

Te liczby są milisekundami epoki lub milisekundami od 1 stycznia 1970 roku. Nie widziałem żadnej dokumentacji, które wartości odejmują, aby wygenerować swoje wartości, ale po pobieżnym sprawdzeniu ga.js wygląda to tak loadEventStart-fetchStart:

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

Na powyższej próby, co oznacza, że będzie ona rejestrować 4,14 sekund na _trackPageLoadTimewezwanie.

Ze specyfikacji W3C Navigation Timing:

atrybut fetchStart

Jeśli nowy zasób ma zostać pobrany przy użyciu protokołu HTTP GET lub odpowiednika, funkcja fetchStart musi zwrócić czas bezpośrednio przed rozpoczęciem sprawdzania przez agenta użytkownika odpowiednich pamięci podręcznych aplikacji. W przeciwnym razie musi zwrócić czas, kiedy agent użytkownika rozpocznie pobieranie zasobu.

loadEventStart atrybut

Ten atrybut musi zwracać czas bezpośrednio przed uruchomieniem zdarzenia ładowania bieżącego dokumentu. Musi zwrócić zero, gdy zdarzenie load nie zostało jeszcze uruchomione.

W przypadku ciekawskich przyjęć kolejność wygląda następująco:

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

Dla wymienionych wartości 0:

unloadEventStarti unloadEventStartpokaż czasy wyładowania poprzedniej strony (ale tylko wtedy, gdy ta strona ma to samo źródło co bieżąca).

redirectEndi redirectStartzmierzyć opóźnienie dodane, jeśli w łańcuchu ładowania strony było przekierowanie HTTP.

secureConnectionStart wydaje się być opcjonalną miarą pomiaru czasu połączenia SSL.

Yahel
źródło
6
Poważnie, rządzisz koleś. Dzięki za tak wyszukaną odpowiedź.
Sid
secureConnectionStartjest standardowym pomiarem, ale przeglądarka (lub cokolwiek obsługuje treść) może zgłaszać. w3c-test.org/webperf/specs/NavigationTiming/…
Eric