tracker seguimiento pageview google codigo javascript google-analytics

javascript - seguimiento - hit en google analytics



¿Qué es "var_gaq=_gaq ||[]; " ¿para? (7)

El código de seguimiento de Async en Google Analytics se ve así:

var _gaq = _gaq || []; _gaq.push([''_setAccount'', ''UA-XXXXX-X'']); _gaq.push([''_trackPageview'']); (function() { var ga = document.createElement(''script''); ga.type = ''text/javascript''; ga.async = true; ga.src = (''https:'' == document.location.protocol ? ''https://ssl'' : ''http://www'') + ''.google-analytics.com/ga.js''; var s = document.getElementsByTagName(''script'')[0]; s.parentNode.insertBefore(ga, s); })();

Acerca de la primera línea:

var _gaq = _gaq || [];

Creo que asegura que si _gaq ya está definido, deberíamos usarlo, de lo contrario deberíamos usar una matriz.

¿Alguien puede explicar para qué es esto?

Además, ¿importa si se _gaq nombre de _gaq ? En otras palabras, ¿Google Analytics se basa en un objeto global llamado _gaq ?


EDITAR:

agregaré más detalles

_gaq es simplemente una matriz javascript, como se definió por primera vez. le agrega eventos, como devoluciones de llamadas de seguimiento de eventos

cuando se carga el script ga.js, sin embargo, Google toma esta matriz y la convierte en un objeto, que ga usa.

esta es la razón por la que se insertan las funciones en la matriz _gaq, luego se invoca el script ga.js después de haber terminado de construir la matriz.

gaq es la cola de Google Analytics. es una pila de métodos GA, como el seguimiento de eventos, la atribución de páginas, etc. Usas el método push () para poner cosas GA allí. reduce la interferencia de eventos, todos deberían hacer esto, o al menos aprender el concepto.


Esta línea está ahí para permitir múltiples fragmentos de código GA en la misma página. Asegura que el segundo fragmento no sobrescriba un _gaq definido por el primero.

El seguimiento asíncrono de GA funciona definiendo primero _gaq como una matriz. Esta matriz actúa como una cola, lo que le permite enviar (agregar) configuración y seguimiento de "comandos" (como _trackPageview) al final de la cola. Sus comandos se almacenan en esta matriz hasta que ga.js se descargue por completo.

Cuando ga.js está listo, ejecuta todos los comandos en la matriz _gaq y reemplaza _gaq con un objeto. Este objeto también tiene un método de inserción, pero en lugar de poner en cola los comandos, los ejecuta inmediatamente, porque ga.js está disponible para procesarlos.

Este mecanismo le permite realizar comandos de configuración y seguimiento sin saber si el navegador ha terminado de descargar ga.js. Esto es necesario porque el fragmento asíncrono descarga ga.js sin bloquear la ejecución de otros códigos en la página. Las cosas se pondrían difíciles si ese otro código (sus comandos de configuración) fuera necesario para saber el estado de ga.js que se está descargando.

Todo esto depende absolutamente del uso del nombre _gaq. No debe intentar nombrarlo si desea que el seguimiento asíncrono funcione.


Esto significa que si _gaq ya está definido, usa que, de lo contrario, declara una matriz vacía. Con push puedes anular la configuración. Si el objeto _gaq no se definiera las 2 "líneas" después de eso, se produciría un error.

Sí, el objeto _gaq se espera en el script que incluye en el código allí (ga.js).


Lamento responder tarde, pero leí la respuesta aceptada y creo que se pierde lo más importante. Así que trataré de explicar lo que entendí:

Primero, se ha explicado, pero la respuesta debe ser completa, así que también lo explico, el código comienza con:

var _gaq = _gaq || [];

Asegura que _gaq está definido. Si no está definido, se inicializa en una matriz vacía.

Piénsalo como el equivalente:

var _gaq; /* ... */ if(!_gaq) _gaq = [];

El valor de javascript undefined es "falsish" / "falsy", es decir, se evalúa como falso cuando se convierte en un booleano, por lo que _gaq se inicializa con [] en este caso.

Lo que es importante tener en cuenta es que:

  • Si _gaq contiene una matriz en esta etapa, _gaq es "trueish", por lo que mantendrá su valor (y no se vaciará)
  • Si _gaq contiene otro tipo de objeto en esta etapa, _gaq también puede mantener su valor.

Bueno, re-expliqué, tan bien como puedo, algo ya explicado. La mayoría de las personas experimentadas con javascript ya lo habían entendido. Sin embargo, la parte interesante no es solo el comienzo!

_gaq.push([''command'', ''argument'']); // is very interesting too

Si _gaq es una matriz, todos adivinarán que el elemento [''command'', ''argument''] se adjunta a la matriz. Google Analytics almacena esto en su cola para su posterior procesamiento. La matriz _gaq se utiliza como una cola.

Pero la parte realmente interesante es que _gaq.push(/*...*/) se puede hacer sin tener una matriz llamada _gaq. Es solo una llamada de método, y las matrices que no son también pueden tener un método " push ".

Se "abre nuevas posibilidades". Aquí hay un resumen de uno:

  • Mientras el archivo javascript externo no esté cargado de forma asíncrona, _gaq es una matriz que se utiliza como cola.
  • El ga.js externo luego procesa la cola.
  • ga.js luego reemplaza _gaq por un objeto que proporciona un método de inserción.
  • Una vez que _gaq es reemplazado por un objeto, los _gaq.push(/*...*/) ya no necesitan ser diferidos, se pueden ejecutar.

Para aquellos que se perdieron la parte de carga del script asíncrono, es:

(function() { var ga = document.createElement(''script''); ga.type = ''text/javascript''; ga.async = true; ga.src = (''https:'' == document.location.protocol ? ''https://ssl'' : ''http://www'') + ''.google-analytics.com/ga.js''; var s = document.getElementsByTagName(''script'')[0]; s.parentNode.insertBefore(ga, s); })();

Usar temporalmente una matriz como cola y el método de inserción es un gran código. Es una forma muy interesante de lidiar con el hecho de que cuando se _gaq.push(/*...*/) , no siempre es ahora si la dependencia se ha cargado de forma asíncrona o no.

Otra forma interesante de gestionar este tipo de problemas es el nuevo fragmento de código "isogram" de Google Analytics : ga(/*...*/) parece aún más intuitivo para las llamadas que _gaq.push(/*...*/) , pero todavía hace frente a las alegrías relacionadas con la carga de dependencias de forma asíncrona.

¿Alguien puede explicar para qué es esto?

Espero que mi respuesta anterior lo haya hecho. Lo que quería compartir aquí es que la primera línea se hace de una manera particular para adaptarse a todo: inicialización que nunca perjudica si se hace dos veces, uso inteligente del método push ...

¿Google Analytics se basa en un objeto global llamado _gaq?

Sí lo hace, cuando se utiliza este fragmento de código ga.js.


Sí, garantiza que _gaq esté definido, por lo que _gaq.push() nunca falla.

No me metería con el nombre de las variables en el código de GA ... ¿tienes alguna razón para hacerlo? ¿Entra en conflicto con alguna de tus variables? (Entonces me cambiaria la mia ...)


Sí, hace exactamente lo que crees que hace :) Es una forma abreviada de

if(!_gaq){ var _gaq = [] }


Utilizando || en la asignación es un truco de programación común que aprovecha la dirección de evaluación del operador, que está de izquierda a derecha. Eso significa que evalúa primero el lado izquierdo. Entonces, y solo si eso es falso (o un falso equivalente), evalúa el lado derecho.

También puedes aprovechar el || o && operadores en una simple declaración if, para que

if (a > 5) { do_a(); } if (!some_boolean) { do_b(); }

volverse

a > 5 && do_a(); some_boolean || do_b(); // Note that the negation operator `!` is gone!

que son a la vez un aspecto más agradable.

La razón por la que los lenguajes lo permiten, es porque es una pérdida de tiempo evaluar el lado derecho si el lado izquierdo hará que la línea completa falle de todos modos. Así que simplemente lo ignora a menos que sea necesario.