2015-07-12 69 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

不一定,您仍然必須有一個腳本來發送頁面視圖。許多人自定義他們的頁面視圖來附加其他數據,如用戶類型。 –

相關問題