谷歌分析如何跟踪事件?

4

我正在尝试理解这个如何运作:

_gaq = _gaq || [];

_gaq.push(['trackEvent', 'something', 'bleee']);

好的,我明白了,我正在向某个神奇的数组中推送数据。但是谷歌的脚本如何知道我已经这样做了呢?它必须要么轮询这个数组(不太可能),要么在用户离开页面时对其进行操作。

我发现,在离开页面时发出请求通常会导致连接在请求完成之前被关闭。

有人能解释一下这个神奇的工作原理吗?

2个回答

5
谷歌创建了自己的对象,并带有自定义的 .push() 方法。因此当你将某些东西推送到“数组”上时,它会激活更多的代码(一个函数),从而创建跟踪像素。
谷歌之所以这样做是因为如果您在 G.A. 代码片段被评估之前尝试使用 _gaq 数组的 push 方法,那么您只是创建了一个发送到 Google 的命令队列(在标准数组中)。如果 G.A. 代码片段已经被评估,那么您实际上正在运行谷歌创建的替换 .push 方法的自定义功能。

这个函数命名为 push ,以便在分析完全加载之前可以使用数组来替代 _gaq 。正在加载分析时,命令将被推送/排队到数组上。当分析完成加载后,它将用 _gaq 对象替换数组并执行所有排队的命令。对 _gaq.push 的后续调用会解析到该函数,该函数会在推送命令时执行。

*来源:https://developers.google.com/analytics/devguides/collection/gajs/methods/gaJSApi_gaq#_gaq.push*


1
我相信他们会用一个新的对象完全替换掉 _gaq,因此一旦分析代码运行,它就不再是一个数组。 - Matthew Crumley
@MatthewCrumley 好的,你说得对,我的措辞有些拗口。 - Jasper

0

_gaq数组在Google Analytics JS库加载时被读取。 _gaq仅是一个方法列表(及其参数),当库成功加载时调用。 Piwik,另一个Web分析系统,也采用了相同的方法。


按照这种逻辑,_gaq.push(..)在库加载后将无法跟踪任何内容。但事实并非如此。 - mkoryak
@mkoryak - 这种方法是为了实现异步跟踪而创建的。很久以前,在加载js跟踪库之前应该定义数组。谷歌改进了这种方法,用对象替换数组,以便在js库加载之前和之后提供相同的接口。 - freedev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接