Javascript 为什么谷歌分析';s代码这么复杂?

Javascript 为什么谷歌分析';s代码这么复杂?,javascript,google-analytics,Javascript,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

当一个人想要在他的网站中包含谷歌分析时,以下是他必须包含的代码:

<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>

(函数(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]| |函数(){
(i[r].q=i[r].q | |[]).push(参数)},i[r].l=1*新日期();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(窗口,文档,“脚本”,“www.google-analytics.com/analytics.js”,“ga”);
ga(“创建”、“UA-XXXXXX-1”、“自动”);
ga(‘发送’、‘页面浏览’);
为什么这不简单

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


因为它是非阻塞的。浏览器加载页面时,将加载所有资源和脚本

使用google的内联功能,它在页面加载后插入脚本,这样页面加载时间就不会增加

另外,并非所有浏览器都支持
async
属性


来源:

因为它做的不止这些。但事实上,你可以使用

<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>

window.GoogleAnalyticsObject=“ga”;
window.ga=window.ga | |函数(){
如果(!window.ga.q)window.ga.q=[];
window.ga.q.push(参数)
}
window.ga.l=+(新日期);
ga(“创建”、“UA-XXXXXX-1”、“自动”);
ga(‘发送’、‘页面浏览’);

因为这是两个脚本而不是一个,所以它们不会这样做,动态创建脚本可以确保异步加载,即使在不理解
async
属性的浏览器中也是如此。

但是第一个脚本可能在第二个脚本中,不是吗?@Arnaud:如果您打算调用
ga()
在加载脚本之前同步。实际上,这两个
create
send
调用并不需要,但是IIRC在一些站点中使用了各种
ga()
调用,它们正好位于include脚本的下方
ga
需要立即声明才能开始注册呼叫。好的,那么唯一的目的就是允许网站对Google Analytics进行自定义呼叫?(并且支持10%不懂异步的浏览器)基本上是的。此外,
ga.l
似乎在加载脚本之前立即用时间戳初始化,这样ga就可以基于它来度量一些事情。它的支持率为90%()。如果是100%,谷歌切换到我的解决方案是不是一个好主意?不一定,你仍然需要一个脚本来发送页面视图。许多人自定义他们的页面视图以附加附加数据,例如用户类型。