代码之家  ›  专栏  ›  技术社区  ›  brad

解释Google Analytics Async Tracker

  •  7
  • brad  · 技术社区  · 14 年前

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

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

    现在,这是一个标准数组,一旦加载了GA的代码,它就会被替换,并被用作存储单击的队列。

    我的困惑在于,如果用户单击一个导致重新加载的链接(在加载GA JavaScript之前),那么这些单击是如何持久的。如果GA代码没有捕获到推送的gaq对象,那么用户单击一个链接并转到一个新页面,这个数组只是每次重新初始化否?

    一个javascript变量不会在导致刷新的请求之间持久存在,这不是真的吗?如果是这样的话,那么我们是不是丢失了导致页面重新加载的原始单击?

    任何解释都非常感谢。

    2 回复  |  直到 13 年前
        1
  •  5
  •   Community uzul    7 年前

    是的,你是对的,如果用户在GA.JS加载之前单击离开该站点,并向Google的服务器执行了uutm.gif请求,那么它将不会跟踪gaq数组,信息将永远消失。但与旧的同步代码相比,此版本代码仍然提供了许多好处。

    首先,使用此方法加载ga.js是 舞台调度。

    聪明的是,GA.JS的加载是通过JavaScript间接注入的,而不是通过硬编码 <script> 标签。按照 Google Code Blog ,

    片段的后半部分 提供加载 与其他代码并行的跟踪代码 页面上的脚本。它执行一个 动态的匿名函数 创建元素和集合 具有正确协议的源。 因此,大多数浏览器将加载 跟踪码与 页面上的其他脚本,因此 减少网页加载时间。

    这意味着对于大多数现代浏览器来说,GA.JS的加载都是以非阻塞方式进行的(而且作为一个好处,当前支持的async=“true”部分 FF 4+, IE10p2+, Chrome 12+, Safari 5.1+, 将这种异步化形式化)。这会稍微缩短加载时间,并稍微降低在GA.JS加载之前发生单击的可能性。

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

        2
  •  2
  •   Brian    14 年前

    是的.JavaScript上下文在页面重新加载时会被丢弃,因此如果用户在加载ga.js之前离开页面,那么这些命中将丢失。GA的异步版本的优势在于它可以放在更高的页面中,这意味着它在用户离开之前更有可能加载GA.JS。