¿Cómo funciona _gaq.push (['_ trackPageLoadTime'])?

102

¿Cómo funciona la función de velocidad del sitio de Google Analytics _gaq.push(['_trackPageLoadTime'])? ¿Existe alguna documentación sobre su funcionamiento?

ilhan
fuente
2
@ stuken.yuri esa es la sintaxis de la llamada asincrónica de Google Analytics. Básicamente significa: agregue la función (nombre) _trackPageLoadTimeen una cola, y luego active todas las funciones en esa cola secuencialmente una vez que ga.js se haya cargado. Le permite cargar de forma ga.jsasincrónica de forma segura .
Yahel

Respuestas:

181

Editar : A partir del 16 de noviembre de 2011, la _trackPageLoadTimefunción quedó obsoleta y su funcionalidad se estableció como configuración predeterminada . (Hablando funcionalmente, ha pasado de ser una función de suscripción voluntaria a una función de exclusión voluntaria).

_setSiteSpeedSampleRatees la nueva función para configurar la frecuencia de muestreo en esta función; su valor predeterminado es 1(como en 1%). Para optar por no usar esta función de Velocidad del sitio, debe pasar 0a esta función:

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

Desde el Centro de ayuda de Google Analytics :

Actualmente, este informe admite los siguientes navegadores: Chrome, Internet Explorer 9 y versiones anteriores de Internet Explorer con la barra Google instalada. Más específicamente, los informes de velocidad del sitio requieren navegadores que admitan la interfaz HTML5 NavigationTiming o que tengan instalada la barra de herramientas de Google Internet Explorer.

Por lo tanto, no implementa su propio temporizador, como lo tenían muchas soluciones anteriores de Homeback, para calcular cuánto tiempo tarda una página en cargarse. En su lugar, utiliza una nueva función HTML5, actualmente solo compatible en los casos enumerados anteriormente, llamada NavigationTiming.

EDITAR : esto ahora es compatible con Firefox 7

(Es importante tener en cuenta que no se ejecuta en todas las cargas; en cambio, actualmente muestra alrededor del 2% de las páginas vistas, aunque está configurado para intentar realizar un seguimiento de todas las cargas de página en el 10% de las visitas; ya que más navegadores admiten la API NavigationTiming, puede esperar que el porcentaje total de la muestra comience a acercarse al 10%).

Se accede a esta interfaz bajo el objeto DOM window.performance(o, en versiones anteriores de Chrome, window.webkitPerformance), usando el timingatributo (entonces, window.performance.timing). El objeto almacena los valores medidos de todos los tiempos de eventos de carga de la página clave, y Google Analytics resta 2 de los valores externos más importantes para juzgar la velocidad de carga de la página.

Para una carga de Mashable.com sin caché, aquí hay un ejemplo de lo que mide (en 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
}

Esos números son milisegundos de época, o milisegundos desde el 1 de enero de 1970. No he visto ninguna documentación sobre qué valores restan para generar sus valores, pero de una inspección superficial de ga.js , parece que es loadEventStart-fetchStart:

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

Para la muestra anterior, eso significa que registraría 4,14 segundos en la _trackPageLoadTimellamada.

De la especificación de sincronización de navegación W3C:

atributo fetchStart

Si el nuevo recurso se va a obtener mediante HTTP GET o equivalente, fetchStart debe devolver la hora inmediatamente antes de que el agente de usuario comience a comprobar los cachés de aplicaciones relevantes. De lo contrario, debe devolver la hora en la que el agente de usuario comienza a buscar el recurso.

Atributo loadEventStart

Este atributo debe devolver la hora inmediatamente anterior a la activación del evento de carga del documento actual. Debe devolver cero cuando el evento de carga aún no se ha disparado.

Para las fiestas curiosas, el orden parece ser el siguiente:

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

Para los valores 0 enumerados:

unloadEventStarty unloadEventStartmuestra los tiempos de descarga de la carga de la página anterior (pero solo si esa página tiene el mismo origen que la actual).

redirectEndy redirectStartmedir la latencia agregada si hubo una redirección HTTP en la cadena de carga de la página.

secureConnectionStart parece ser una medida opcional para medir el tiempo de conexión SSL.

Yahel
fuente
6
Eres un rockero, en serio. Gracias por una respuesta tan elaborada.
Sid
secureConnectionStartes una medida estándar, pero es opcional para el navegador (o lo que maneje el contenido) para informar. w3c-test.org/webperf/specs/NavigationTiming/…
Eric