2011-02-10 57 views

回答

4

異步分析片斷的工作是加載檢查用戶的各種信息,以確定他們的瀏覽器更密集的腳本,所以它可以報告給分析服務器。然而,由於所有這些分析數據對於頁面的可用性都不是至關重要的,因此Google希望在瀏覽器方便的時候運行它。

從理論上講,他們可以建議程序員將異步代碼段添加到頁面的最底部,因爲身體的最後一個元素。但是,爲了讓程序員能夠捕獲UI事件以發送到分析,他們希望儘早使用_gaq變量。例如,您可能有一個按鈕:<button onclick="_gaq.push(...)">Track</button>。通過使_gaq提供早,代碼在異步代碼段的小位將排隊這些消息並較重ga.js稍後會向他們發送關閉服務器。現在

,一些implementation detailsga.js通過添加新<script>元件到文檔頭與async屬性集加載。 IE和WebKit將異步加載從腳本插入的標籤<script>。 Firefox和Opera將遵守async屬性,並且還會異步加載腳本。無論哪種方式,ga.js異步加載,在瀏覽器的方便。

最後,一旦ga.js被執行,不會阻塞頁面渲染,由於異步加載,它可以做收集所有用戶的數據和任何的消息在_gaq隊列的繁重的工作,並將它們發送到服務器。

摘要:這種方法使用初始化像_gaq你的頁面可以訪問之前全部ga.js腳本準備好一些關鍵變量小聯腳本。這個小腳本也動態地將<script src="ga.js">標籤到文檔中的這樣一種方式,大多數瀏覽器會下載和異步執行它,不會阻塞頁面的渲染或關鍵腳本的評價。

2

當瀏覽器加載頁面時,它從上到下都這樣做。瀏覽器只能使用有限數量的「連接」來加載外部鏈接的文檔。如果你把他們的腳本放在你的腳本之上,你自己的腳本可能不會被加載直到它們完成。分析代碼對於頁面的功能並不重要,所以我們可以最後保存它。

+0

但谷歌宣稱其服務器的可靠性,就建議用戶不要服務的ga.js本地,因爲它的優化並可能在用戶的瀏覽器緩存去世界各地...它沒有任何意義我會這樣,特別是因爲它並行加載並且不像其他腳本那樣阻塞。 – concept47 2011-02-10 22:41:31

+0

「並行」概念受限於瀏覽器可用於鏈接文件異步請求的線程數。 Firefox,IIRC的上限爲6。無論Google的服務器速度有多快,在瀏覽器加載頁面和所有相關文檔時,CLIENT連接速度仍然有限​​(在這種情況下)。假設用戶撥號 - 您希望在Google Analytics之前加載您的腳本,因爲您的腳本**可能會影響可用性,Google的**當然**不會,並且可能會在**之前**分鐘**下一個異步線程打開。 – 2011-02-10 22:46:47

相關問題