【问题标题】:Explaining Google Analytics async tracker解释 Google Analytics 异步跟踪器
【发布时间】:2010-09-20 18:34:18
【问题描述】:

我了解 google 的异步分析跟踪器的工作原理。以下代码用于初始化命令数组:

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

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

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

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

非常感谢任何解释。

【问题讨论】:

    标签: javascript google-analytics


    【解决方案1】:

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

    首先,使用这种方法加载ga.js是不是阻塞的。

    巧妙的是,ga.js 的加载是通过 JavaScript 间接注入的,而不是通过硬编码的 &lt;script&gt; 标签。根据Google Code Blog

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

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

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

    【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 好吧,内联 js _gaq 初始化代码要高得多,但他们仍然建议将 ga.js 的实际加载放在所有普通 JS 之后。而且,ga.js 文件本身的这种加载不是异步的,因为脚本标签不会阻止?
    • 他们建议把它放在头部底部而不是顶部的唯一原因是因为 Opera 还不支持异步脚本(它们是唯一一个没有 GA sn-p 的浏览器) t 完全异步)。 ga.js 的加载是完全异步的。异步脚本不会像普通脚本那样阻塞。
    猜你喜欢
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 2013-10-29
    • 2014-08-09
    • 2018-01-20
    • 1970-01-01
    • 2011-08-21
    相关资源
    最近更新 更多