analytics.js 的工作原理

您需要使用 analytics.js 进行的所有跟踪几乎都可以使用 ga() 命令队列完成。本指南介绍什么是命令队列、其工作原理以及如何执行命令来跟踪用户互动。

ga 命令队列

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

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

例如,如果您运行跟踪代码段并立即将 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 命令(及其相应方法)都接受多种不同格式的参数。这是为了便于向特定方法传递常用字段。

以下面的 JavaScript 跟踪代码段中的两条命令为例:

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 执行命令以及命令队列的工作原理有了相当透彻的了解。下一篇指南将介绍如何创建跟踪器对象