<script type="text/javascript"> var _gaq = _gaq || []; _gaq.push( ['_setAccount','UA-xxxxxxxx-x'],['_trackPageview'] ); </script>
现在,这是一个标准数组,在加载GA代码后会被替换,并用作存储点击的一种队列.
我的困惑在于想知道如果用户点击导致重新加载的链接(在加载GA javascript之前),这些点击可能会如何持续存在.如果GA代码没有捕获到_gaq对象的那个推送,那么用户点击一个链接并转到一个新页面,这个数组每次都没有重新初始化?
在导致刷新的请求中,javascript变量不会持久存在吗?如果是这种情况,那么我们还没有丢失导致页面重新加载的原始点击吗?
非常感谢任何解释.
解决方法
首先,使用此方法加载ga.js不会阻塞.
巧妙地,ga.js的加载是通过JavaScript间接注入的,而不是通过硬编码的<脚本>注入.标签.按照Google Code Blog,
The second half of the snippet@H_404_22@ provides the logic that loads the@H_404_22@ tracking code in parallel with other@H_404_22@ scripts on the page. It executes an@H_404_22@ anonymous function that dynamically@H_404_22@ creates a element and sets@H_404_22@ the source with the proper protocol.@H_404_22@ As a result,most browsers will load@H_404_22@ the tracking code in parallel with@H_404_22@ other scripts on the page,thus@H_404_22@ reducing the web page load time.
这意味着ga.js的加载对于大多数现代浏览器以非阻塞方式发生(并且作为一个好处,async =“true”部分,当前在FF 4+,IE10p2+,Chrome 12+,Safari 5.1+,中支持正式化此异步).这可以温和地减少加载时间,并且可以轻微降低ga.js加载前发生点击的可能性.
提前排队_gaq阵列的好处是防止竞争条件;之前,如果您在加载ga.js之前尝试进行GA调用(例如,事件跟踪视频播放),则会抛出错误并且事件调用将丢失且永远无法恢复.这样,只要ga.js最终加载,_gaq数组就可以在加载时为所有调用提供服务.