解释Google Analytics异步跟踪器

bra*_*rad 7 javascript google-analytics

我有一个关于谷歌的异步分析跟踪器的工作原理.以下代码用于初始化命令数组:

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

现在,这是一个标准数组,在加载GA代码后会被替换,并用作存储点击的一种队列.

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

在导致刷新的请求中,javascript变量不会持久存在吗?如果是这种情况,那么我们是否丢失了导致页面重新加载的原始点击?

非常感谢任何解释.

Yah*_*hel 5

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

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

巧妙的是,ga.js的加载是通过JavaScript间接注入的,而不是通过硬编码<script>标记.根据Google Code博客,

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

这意味着ga.js的加载对于大多数现代浏览器以非阻塞方式发生(并且作为一个好处,async ="true"部分,目前在FF 4 +,IE10p2 +,Chrome 12 +,Safari 5.1+中受支持) ,形式化这种异步).这可以温和地减少加载时间,并且可以轻微降低ga.js加载前发生点击的可能性.

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