2010-05-13 15 views
2

Ceci est plus une question de curiosité que toute autre chose ...balises de script double dans le code de suivi Google Analytics

Google charge de s'ajouter le code de suivi analytique comme suit:

<script type="text/javascript"> 
    var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www."); 
    document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E")); 
</script> 
<script type="text/javascript"> 
    try{ 
     var pageTracker = _gat._getTracker("UA-xxxxxx-x"); 
     pageTracker._trackPageview(); 
    } catch(err) {} 
</script> 

Je me demande un peu JS gourou ici pourrait me dire pourquoi ils le séparent en deux étiquettes de script au lieu de tout coller à l'intérieur d'un. Je sais que la partie supérieure pourrait être placée dans l'en-tête et la partie inférieure juste avant l'étiquette de corps pour assurer le chargement de la page avant qu'elle ne soit suivie, mais je me demande s'il y a quelque chose de plus. Tous ceux qui sauraient probablement comment séparer le code en deux balises de toute façon.

Je ne demande que cela vient de la Goog et est utilisé par des millions de sites ...

Merci

+1

Je viens de laisser un commentaire. Il ya un extrait cool pour charger GA de manière asynchrone: http://code.google.com/apis/analytics/docs/tracking/asyncTracking.html – juandopazo

+0

Nice, je ne savais pas qu'ils avaient cela, merci – Tom

Répondre

3

C'est d'être multi-navigateur compatible, il doit faire en sorte que document.write() colle l'étiquette, il est la génération avant les pistes suivantes de bloc de script, de sorte que le résultat ressemble à ceci:

<script src='http://www.google-analytics.com/ga.js' type='text/javascript'></script> 
<script type="text/javascript"> 
    try{ 
     var pageTracker = _gat._getTracker("UA-xxxxxx-x"); 
     pageTracker._trackPageview(); 
    } catch(err) {} 
</script> 

Si elle didn Ne pas le faire en 2 scripts, _gat serait indéfini dans le deuxième bloc de script parce que le ga.js n'a pas encore chargé ... cependant comme un bloc de script avant celui celui-là, la page attend avant d'exécuter le code dans le dernier bloc , ce qui fait que tout fonctionne quand c'est censé. Fondamentalement, le navigateur exécute les blocs de script dans l'ordre, google profitant de ce fait pour charger le script quand il doit être chargé ... qui est avant qu'il soit utilisé.

+0

Ah, a du sens ... acceptera cette réponse une fois que le retard aura disparu. Merci. – Tom

1

Si je devais deviner, je dirais que c'est à cause de la document.write(unescape(...)); ligne où ils sont dynamiquement y compris un autre fichier JS. Pourquoi ils le chargent dynamiquement je ne sais pas. Je suppose que cela a à voir avec si vous exécutez https ou http.

S'il s'agissait d'un fichier, je doute que le fichier ga.js soit chargé à temps pour exécuter le code pageTracker. _gat n'existerait pas, et vous obtiendriez une erreur plutôt que de pouvoir utiliser Google Analytics.

+0

Une pensée intéressante .. mais est-ce que la fermeture et la réouverture d'une étiquette pourraient faire assez de différence pour que ce soit le cas? – Tom