2010-09-20 14 views
7

Ho una spiegazione del funzionamento del tracker di analisi asincrona di google. Il codice seguente viene utilizzato per init una matrice di comando:Spiegazione del tracker async di Google Analytics

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

Ora, questo è un array standard che viene sostituita una volta il codice del GA è stato caricato ed è usato come una sorta di coda che memorizza il numero di clic.

La mia confusione consiste nel chiedermi come questi clic possano essere persi se un utente fa clic su un collegamento che causa un ricaricamento (prima che venga caricato il javascript di GA). Se il codice GA non ha acquisito tale pressione sull'oggetto _gaq, l'utente fa clic su un collegamento e passa a una nuova pagina, questo array è appena inizializzato ogni volta no?

Non è vero che una variabile javascript non persisterà tra le richieste che causano un aggiornamento? Se questo è il caso, non abbiamo poi perso quel clic originale che ha causato il ricaricamento della pagina?

Qualsiasi spiegazione è molto apprezzata.

risposta

5

Sì, hai ragione se l'utente fa clic fuori dal sito prima che ga.js abbia caricato e abbia eseguito la richiesta __utm.gif ai server di Google, quindi non tiene traccia dell'array _gaq e tali informazioni non sono più disponibili per sempre. Ma questo codice di versione offre ancora molti vantaggi rispetto al vecchio codice sincrono.

Innanzitutto, il caricamento di ga.js utilizzando questo metodo è non di blocco.

Sapientemente, il caricamento di ga.js viene iniettato indirettamente tramite JavaScript, anziché tramite un tag codificato <script>. Come per Google Code Blog,

La seconda metà del frammento fornisce la logica che carica il codice monitoraggio in parallelo con altri script nella pagina. Esegue una funzione anonima che dinamicamente crea un elemento e imposta l'origine con il protocollo corretto. Di conseguenza, la maggior parte dei browser caricherà il codice di monitoraggio in parallelo con altri script nella pagina, quindi riducendo il tempo di caricamento della pagina Web.

Ciò significa che il caricamento delle ga.js avviene in modo non bloccante per la maggior parte dei browser moderni (e come un vantaggio, Async = "true" parte, attualmente supportato in FF 4+, IE10p2+, Chrome 12+, Safari 5.1+, formalizza questo asynchronization). Questo riduce leggermente il tempo di caricamento e riduce leggermente la probabilità che si verifichino dei clic prima che ga.js sia caricato.

Il vantaggio di accodare in anticipo l'array _gaq è quello di prevenire le condizioni di gara; in precedenza, se si tentava di effettuare chiamate GA prima che caricasse ga.js (ad esempio, Monitoraggio eventi di una riproduzione video), si genera un errore e la chiamata all'evento si perde e non può essere ripristinata. In questo modo, finché il file ga.js viene caricato, l'array _gaq è pronto a servire tutte le chiamate al momento del caricamento.

+0

puoi fornire un link di lavoro? quello sembra essere rotto – brad

+0

risolto il collegamento; è http://googlecode.blogspot.com/2009/12/google-analytics-launches-asynchronous.html – Yahel

2

Sì. I contesti Javascript vengono gettati via alla ricarica della pagina, quindi se l'utente abbandona la pagina prima che ga.js venga caricata, tali hit vengono persi. Il vantaggio della versione asincrona di GA è che può essere messo più in alto nella pagina, il che significa che è molto più probabile che ga.js si carichi prima che l'utente se ne vada.

+0

beh, il codice js _gaq init inline è molto più elevato, ma si consiglia comunque di inserire il caricamento effettivo di ga.dopo tutto il tuo normale JS. Inoltre, questo caricamento del file ga.js non è asincrono poiché i tag di script non bloccano no? – brad

+0

L'unico motivo per cui si consiglia di inserirlo nella parte inferiore della testa anziché in cima è perché Opera non supporta ancora gli script asincroni (sono l'unico browser in cui lo snippet di GA non è completamente asincrono). Il caricamento di ga.js _is_ è completamente asincrono. Gli script asincroni non bloccano come fanno quelli normali. – Brian

+0

thx per le informazioni La risposta di YC è stata un po 'più approfondita. – brad

Problemi correlati