2010-09-20 9 views
7

Tengo información sobre cómo funciona el rastreador de análisis asincrónico de Google. El siguiente código se utiliza para inicializar una matriz de comandos:Explicación del rastreador asíncrono de Google Analytics

<script type="text/javascript"> 
    var _gaq = _gaq || []; 
    _gaq.push(
    ['_setAccount', 'UA-xxxxxxxx-x'], 
    ['_trackPageview'] 
); 
</script> 

Ahora bien, esta es una matriz estándar que se reemplaza una vez que se carga el código del GA y se utiliza como una especie de cola que almacena los clics.

Mi confusión radica en preguntarse cómo podrían persistir estos clics si un usuario hace clic en un enlace que causa una recarga (antes de que se cargue el javascript de GA). Si el código GA no ha capturado ese impulso en el objeto _gaq, entonces el usuario hace clic en un enlace y va a una nueva página, esta matriz simplemente se inicializa cada vez que no?

¿No es cierto que una variable de JavaScript no persistirá en las solicitudes que provocan una actualización? Si este es el caso, ¿no hemos perdido el clic original que causó la recarga de la página?

Cualquier explicación es muy apreciada.

Respuesta

5

Sí, tiene razón en que si el usuario hace clic fuera del sitio antes de que ga.js haya cargado y haya ejecutado la solicitud __utm.gif a los servidores de Google, entonces no rastreará la matriz _gaq y esa información se habrá ido Siempre. Pero este código de versión aún ofrece muchos beneficios sobre el código síncrono anterior.

En primer lugar, la carga de ga.js con este método es no bloqueando.

Inteligentemente, la carga de ga.js se inyecta indirectamente a través de JavaScript, en lugar de a través de una etiqueta <script> codificada. Según Google Code Blog,

La segunda mitad del fragmento proporciona la lógica que carga el código de seguimiento en paralelo con otros secuencias de comandos en la página. Ejecuta una función anónima que dinámicamente crea un elemento y configura la fuente con el protocolo adecuado. Como resultado, la mayoría de los navegadores cargarán el código de seguimiento en paralelo con otros scripts en la página, por lo tanto reduciendo el tiempo de carga de la página web.

Esto significa que la carga de ga.js. se produce de un modo no-bloqueo para la mayoría de los navegadores modernos (y como un beneficio, el async = "true" parte, actualmente soportado en FF 4+, IE10p2+, Chrome 12+, Safari 5.1+, formaliza esta desincronización). Esto reduce ligeramente el tiempo de carga y reduce levemente la probabilidad de que se produzcan clics antes de que ga.js se haya cargado.

La ventaja de poner en cola la matriz _gaq de antemano es evitar condiciones de carrera; Anteriormente, si intentaba realizar llamadas GA antes de que se cargue ga.js (por ejemplo, el seguimiento de eventos de una reproducción de video), arrojaría un error y la llamada al evento se perdería y nunca se recuperaría. De esta forma, siempre que ga.js se cargue finalmente, la matriz _gaq está lista para atender todas las llamadas en el momento de la carga.

+0

puede proporcionar un enlace de trabajo? ese parece estar roto – brad

+0

Se corrigió el enlace; es http://googlecode.blogspot.com/2009/12/google-analytics-launches-asynchronous.html – Yahel

2

Yep. Los contextos de Javascript se descartan en la recarga de página, por lo que si el usuario abandona la página antes de que ga.js se cargue, esos hits se pierden. La ventaja de la versión asíncrona de GA es que puede colocarse más arriba en la página, lo que significa que es mucho más probable que tenga carga ga.js antes de que el usuario se vaya.

+0

bien, el código de inicialización js _gaq en línea se pone mucho más alto, pero todavía recomiendan poner la carga real de ga.js después de todos sus JS normales. Y también, esta carga del archivo ga.js en sí no es asíncrona ya que las etiquetas de script no bloquean? – brad

+0

La única razón por la que recomiendan colocarlo en la parte inferior de la cabeza en lugar de en la parte superior es porque Opera aún no admite secuencias de comandos asíncronas (son el único navegador en el que el fragmento de GA no es completamente asincrónico). La carga de ga.js _is_ es completamente asincrónica. Los scripts de Async no se bloquean como lo hacen los scripts normales. – Brian

+0

thx para la información La respuesta de YC fue un poco más profunda. – brad

Cuestiones relacionadas