Google Anlaytics async tracking snippet的含义是什么?

Dor*_*rad 5 javascript google-analytics

Google在" 将analytics.js添加到您的网站 "指南中提供以下代码段:

window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new Date;
Run Code Online (Sandbox Code Playgroud)

这段代码是否初始化了Google Analytics?怎么样?

Lia*_*iam 4

让我们分解一下

window.ga=
Run Code Online (Sandbox Code Playgroud)

正在ga为 windows 对象分配一个变量

window.ga||function(){...}
Run Code Online (Sandbox Code Playgroud)

由于短路,这将分配现有函数window.ga或调用该函数。这可以被认为是:

if(!window.ga){
    window.ga = function(){...}
}
Run Code Online (Sandbox Code Playgroud)

(ga.q=ga.q||[])
Run Code Online (Sandbox Code Playgroud)

如上所述,如果数组尚不存在,则使用短路将数组分配给ga.q( )。windows.ga.q然后push arguments到这个数组。所以ga最终成为一个push将参数传入数组的函数。

那么它

ga.l=+new Date;
Run Code Online (Sandbox Code Playgroud)

这使用一元运算符ga.l=将日期 () 指定为数字 ( +new Date) 。

因此,这段代码最终创建了一个ga带有函数的对象,该函数在首次调用 ( q) 时创建一个空数组,然后推arguments送到该数组。它还创建一个日期整数 ( l)。

代码已被缩小到一行并减少其大小。它还以这样的方式编写:如果对象已经存在,则不会覆盖它。

为什么?嗯,我认为@Patricks 的回答涵盖了这一点