analytics.js 的工作原理

您需要使用 analytics.js 进行的所有衡量几乎都可以使用 ga() 命令队列完成。本指南介绍了命令队列的含义、运行方式以及如何执行命令来衡量用户互动。

ga 命令队列

Google Analytics(分析)代码定义了一个称为“命令队列”的全局 ga 函数。之所以称其为命令队列,是因为该函数不会立即执行其中的命令,而是将这些命令加入到队列中,将这些命令的执行延迟到 analytics.js 库加载完成后进行。

在 JavaScript 中,函数也是对象,这意味着函数中也可以包含属性。Google Analytics(分析)代码在 ga 函数对象上定义了一个值为空数组的 q 属性。在 analytics.js 库尚未加载完成之前,调用 ga() 函数会将传递给 ga() 函数的参数列表附加到 q 数组的末尾。

例如,如果您运行 Google Analytics(分析)代码并立即将 ga.q 的内容写入控制台日志,就会看到一个数组,其中有两个元素,分别包含已传递给 ga() 函数的两组参数:

console.log(ga.q);

// Outputs the following:
// [
//   ['create', 'UA-XXXXX-Y', 'auto'],
//   ['send', 'pageview']
// ]

analytics.js 加载完成后,会立即查看 ga.q 数组的内容并依次执行每条命令。然后,ga() 函数将被重新定义以立即执行后续调用。

在这种模式下,开发者在使用 ga() 命令队列时无需担心 analytics.js 库是否已完成加载。该模式提供了一种类似于同步代码的简单接口,规避了异步代码的诸多复杂性。

将命令添加到队列

ga() 命令队列的所有调用都使用同一个签名。第一个参数“command”是一个标识特定 analytics.js 方法的字符串。其他参数都是要传递给该方法的参数。

特定命令所引用的方法可以是全局方法(例如 ga 对象上的 create 方法),也可以是跟踪器对象上的实例方法(例如 send)。如果 ga() 命令队列收到一条它无法识别的命令,会直接将其忽略,这使得调用 ga() 函数这一行为非常安全,因为这几乎不会导致错误。

要查看可通过命令队列执行的所有命令的完整列表,请参阅 ga() 命令队列参考

命令参数

大多数 analytics.js 命令(及其相应方法)都接受多种不同格式的参数。这是为了便于更轻松地向特定方法传递常用字段。

以下面的 Google Analytics(分析)代码中的两条命令为例:

ga('create', 'UA-XXXXX-Y', 'auto');
ga('send', 'pageview');

在第一条命令中,create 接受了可分别指定为第二个、第三个和第四个参数的 trackingIdcookieDomainname 可选字段。send 命令接受了可选的第二个参数 hitType

所有命令均接受普遍适用的 fieldsObject 参数,这种参数可用于指定任何字段。例如,可将上述代码中的两条命令改写为:

ga('create', {
  trackingId: 'UA-XXXXX-Y',
  cookieDomain: 'auto'
});
ga('send', {
  hitType: 'pageview'
});

要查看每条命令所允许的可选参数的完整列表,请参阅 ga() 命令队列参考

后续步骤

阅读本指南后,您应该对如何使用 analytics.js 执行命令以及命令队列的工作原理有了相当透彻的了解。下一篇指南将介绍如何创建跟踪器对象