2010-09-20 50 views
7

我有一个谷歌的异步分析跟踪器如何工作。下面的代码是用来初始化命令阵列:解释谷歌分析异步跟踪器

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

现在,这是一次GA的代码加载该被取代,作为一种队列存储您点击一个标准的数组。

我的疑惑在于想知道如果用户点击导致重新加载的链接(在加载GA javascript之前),这些点击可能会如何持续。如果GA代码没有捕获到_gaq对象的推送,那么用户点击一个链接并进入一个新页面,这个数组每次都会被重新初始化。

这不是真的,一个javascript变量不会持续引发刷新的请求吗?如果是这种情况,那么我们是不是失去了导致页面重新加载的原始点击?

任何解释是非常感谢。

回答

5

是的,你说得对,如果用户在ga.js加载并执行了__utm.gif请求到Google服务器之前点击离开该网站,那么它将不会跟踪_gaq数组,并且该信息不存在永远。但是这个版本代码仍然比旧的同步代码提供了许多好处。

首先,使用此方法加载ga.js是而不是阻塞。

巧妙地,ga.js的加载通过JavaScript间接注入,而不是通过硬编码的<script>标记注入。按照Google Code Blog

摘录 的后半部分提供与页面上的其他 脚本加载并行 跟踪代码的逻辑。它执行一个 匿名函数,动态地 创建一个元素,并设置 来源与适当的协议。因此,大多数浏览器会将 的跟踪代码与 页面上的其他脚本并行加载,因此 会减少网页加载时间。

这意味着ga.js来加载在非阻塞的方式出现在大多数现代浏览器(和一个好处,异步=“真”的一部分,目前在FF 4+, IE10p2+, Chrome 12+, Safari 5.1+,支持形式化这个异步)。这可以轻松减少加载时间,并轻微降低ga.js加载之前发生点击的可能性。

提前排队_gaq数组的好处是防止竞争条件;事先,如果您在加载ga.js(例如,事件跟踪视频播放)之前尝试进行GA呼叫,它会引发错误,并且Event调用将会丢失并且永远无法恢复。这样,只要ga.js最终加载,_gaq数组就可以在加载时为所有调用提供服务。

+0

你能提供一个工作链接吗?那个似乎被打破了 – brad 2010-09-21 14:31:10

+0

修复了这个链接;它是http://googlecode.blogspot.com/2009/12/google-analytics-launches-asynchronous.html – Yahel 2010-09-21 14:37:46

2

是的。 JavaScript上下文在页面重新加载时被抛弃​​,所以如果用户在ga.js加载之前离开页面,那些点击就会丢失。异步版GA的优势在于它可以放在页面中更高,这意味着在用户离开之前加载ga.js的可能性更大。

+0

以及内联js _gaq init代码放得高一些,但他们仍然建议把ga的实际加载。JS之后所有正常的JS。而且,ga.js文件本身的加载与脚本标记不阻止的不同步? – brad 2010-09-20 19:35:12

+0

他们推荐把它放在头部的底部而不是顶部的唯一原因是,Opera目前还不支持异步脚本(它们是GA代码片段不完全异步的唯一浏览器)。 ga.js的加载完全异步。异步脚本不会像正常脚本那样阻塞。 – Brian 2010-09-21 02:04:19

+0

thx的信息YC的答案是更深入一点。 – brad 2010-09-21 14:31:36