2015-07-12 53 views
1

当一个人想包括谷歌Analytics(分析)在他的网站,这里是他已为包括代码:为什么Google Analytics的代码如此复杂?

<script> 
    (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ 
    (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), 
    m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) 
    })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); 

    ga('create', 'UA-XXXXXX-1', 'auto'); 
    ga('send', 'pageview'); 

</script> 

为什么这并不是简单

<script src="http://www.google-analytics.com/analytics.js?id=UA-XXXXXX-1" async></script> 

回答

1

,因为它并不止于此。不过说实在的,你可以使用

<script> 
window.GoogleAnalyticsObject = "ga"; 
window.ga = window.ga || function() { 
    if (!window.ga.q) window.ga.q = []; 
    window.ga.q.push(arguments) 
} 
window.ga.l = +(new Date); 
ga('create', 'UA-XXXXXX-1', 'auto'); 
ga('send', 'pageview'); 
</script> 
<script src="http://www.google-analytics.com/analytics.js?id=UA-XXXXXX-1" async></script> 

他们只是不,因为这是两个脚本,而不是一个,并动态地创建脚本,确保异步加载即使在不了解async属性浏览器。

+0

但是第一个脚本可能在第二个脚本中,不是吗? – Arnaud

+1

@Arnaud:如果您打算在加载脚本之前同步调用'ga()',则不适用。对于这两个'create'和'send'调用来说确实没有必要,但是在一些站点中使用了各种'ga()'调用,这些调用就位于include脚本的正下方。需要立即声明'ga'来开始注册呼叫。 – Bergi

+0

好的,所以唯一的目的是允许网站自定义调用Google Analytics(分析)? (并支持10%的不理解异步的浏览器) – Arnaud

1

因为这种方式是非阻塞的。当浏览器加载页面时,它会加载所有的资源和脚本。

使用谷歌的内联函数,它在页面加载后插入脚本,因此页面加载时间不会增加。

此外,所有浏览器都不支持async属性。

来源:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/script#Browser_compatibility

+0

它支持90%(http://caniuse.com/#feat=script-async)。如果它达到100%,Google是否会转向我的解决方案是一个好主意? – Arnaud

+0

不一定,您仍然必须有一个脚本来发送页面视图。许多人自定义他们的页面视图来附加其他数据,如用户类型。 –

相关问题