我有一个关于谷歌的异步分析追踪器是如何工作的。以下代码用于初始化命令数组:
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(
['_setAccount', 'UA-xxxxxxxx-x'],
['_trackPageview']
);
</script>现在,这是一个标准数组,一旦GA的代码加载,它就会被替换,并被用作一种存储点击的队列。
我的困惑在于想知道,如果用户点击一个导致重新加载的链接(在GA javascript被加载之前),这些点击是如何持久的。如果GA代码没有捕获_gaq对象上的推送,那么用户单击一个链接并转到一个新页面,这个数组每次都会重新初始化,不是吗?
javascript变量不会在导致刷新的请求之间持久存在,这不是真的吗?如果是这样的话,我们不是失去了导致页面重新加载的原始点击吗?
任何解释都是非常感谢的。
发布于 2010-09-21 05:16:21
是的,您是对的,如果用户在ga.js加载并执行对谷歌服务器的__utm.gif请求之前离开了站点,那么它将不会跟踪_gaq数组,并且该信息将永远消失。但是,与旧的同步代码相比,这个版本的代码仍然提供了许多好处。
首先,使用此方法加载ga.js不会阻塞。
巧妙的是,ga.js的加载是通过JavaScript间接注入的,而不是通过硬编码的<script>标记。根据Google Code Blog,
代码段的后半部分
提供了与页面上的其他脚本并行加载跟踪代码的逻辑。它执行一个匿名函数,该函数动态创建一个元素并使用适当的协议设置源。因此,大多数浏览器将与页面上的其他脚本并行加载跟踪代码,从而减少网页加载时间。
这意味着对于大多数现代浏览器来说,ga.js的加载是以非阻塞的方式进行的(并且作为一个好处,FF 4+, IE10p2+, Chrome 12+, Safari 5.1+,中当前支持的async=“真”部分将这种异步正式化了)。这略微减少了加载时间,并略微降低了在ga.js加载之前发生点击的可能性。
提前将_gaq数组排队的好处是防止竞争条件;在此之前,如果您尝试在ga.js加载之前进行GA调用(例如,跟踪视频播放的事件),则会抛出一个错误,并且事件调用将丢失且无法恢复。这样,只要ga.js最终加载,_gaq数组就准备好在加载时为其所有调用提供服务。
发布于 2010-09-21 02:42:26
是啊。Javascript上下文在页面重新加载时会被丢弃,因此如果用户在ga.js加载之前离开页面,这些命中内容就会丢失。GA异步版本的优点是它可以放在页面的更高位置,这意味着在用户离开之前,它更有可能加载ga.js。
https://stackoverflow.com/questions/3754367
复制相似问题