摘 "要:網站數據統計分析工具是網站站長和運營人員經常使用的一種工具,比較常用的有谷歌分析、百度統計和騰訊分析等等。所有這些統計分析工具的第一步都是網站訪問數據的收集。目前主流的數據收集方式基本都是基于javascript的。本文將簡要分析這種數據收集的原理。
關鍵詞:網站統計;數據收集;腳本執行;
文章編號:1674-3520(2014)-11-00-01
一、數據收集原理分析
簡單來說,網站統計分析工具需要收集到用戶瀏覽目標網站的行為(如打開某網頁、點擊某按鈕、將商品加入購物車等)及行為附加數據(如某下單行為產生的訂單金額等)。早期的網站統計往往只收集一種用戶行為:頁面的打開。而后用戶在頁面中的行為均無法收集。這種收集策略能滿足基本的流量分析、來源分析、內容分析及訪客屬性等常用分析視角,但是,隨著ajax技術的廣泛使用及電子商務網站對于電子商務目標的統計分析的需求越來越強烈,這種傳統的收集策略已經顯得力不能及。后來,Google在其產品谷歌分析中創新性的引入了可定制的數據收集腳本,用戶通過谷歌分析定義好的可擴展接口,只需編寫少量的javascript代碼就可以實現自定義事件和自定義指標的跟蹤和分析。
二、流程概覽
首先通過一幅圖總體看一下數據收集的基本流程。
圖1. 網站統計數據收集基本流程
首先,用戶的行為會觸發瀏覽器對被統計頁面的一個http請求,這里姑且先認為行為就是打開網頁。當網頁被打開,頁面中的埋點javascript 片段會被執行,用過相關工具的朋友應該知道,一般網站統計工具都會要求用戶在網頁中加入一小段javascript代碼,這個代碼片段一般會動態創建一個 script標簽,并將src指向一個單獨的js文件,此時這個單獨的js文件(圖1中綠色節點)會被瀏覽器請求到并執行,這個js往往就是真正的數據收 集腳本。數據收集完成后,js會請求一個后端的數據收集腳本(圖1中的backend),這個腳本一般是一個偽裝成圖片的動態腳本程序,可能由php、 python或其它服務端語言編寫,js會將收集到的數據通過http參數的方式傳遞給后端腳本,后端腳本解析參數并按固定格式記錄到訪問日志,同時可能 會在http響應中給客戶端種植一些用于追蹤的cookie。上面是一個數據收集的大概流程,下面以谷歌分析為例,對每一個階段進行一個相對詳細的分析。
三、埋點腳本執行階段
若要使用谷歌分析(以下簡稱GA),需要在頁面中插入一段它提供的javascript片段,這個片段往往被稱為埋點代碼。下面是谷歌分析埋點代碼截圖:
圖2. 谷歌分析埋點代碼
其中_gaq是GA的的全局數組,用于放置各種配置,其中每一條配置的格式為:
1、_gaq.push(['Action', 'param1', 'param2', ...]);
Action指定配置動作,后面是相關的參數列表。GA給的默認埋點代碼會給出兩條預置配置,_setAccount用于設置網站標識ID,這個標識ID是在注冊GA時分配的。_trackPageview告訴GA跟蹤一次頁面訪問。更多配置請參考:https://developers.google.com/analytics/devguides/collection/gajs/。實際上,這個_gaq是被當做一個FIFO隊列來用的,配置代碼不必出現在埋點代碼之前,具體請參考上述鏈接的說明。這段代碼的主要目的就是引入一個外部的js文件 (ga.js),方式是通過document.createElement方法創建一個script并根據協議(http或https)將src指向對應 的ga.js,最后將這個element插入頁面的dom樹上。
四、數據收集腳本執行階段
數據收集腳本(ga.js)被請求后會被執行,這個腳本一般要做如下幾件事:
1、通過瀏覽器內置javascript對象收集信息,如頁面title(通過document.title)、referrer(上一跳url, 通過document.referrer)、用戶顯示器分辨率(通過windows.screen)、cookie信息(通過 document.cookie)等等一些信息。
2、解析_gaq收集配置信息。這里面可能會包括用戶自定義的事件跟蹤、業務數據(如電子商務網站的商品編號等)等。
3、將上面兩步收集的數據按預定義格式解析并拼接。
4、請求一個后端腳本,將信息放在http request參數中攜帶給后端腳本。
五、后端腳本執行階段
GA的__utm.gif是一個偽裝成gif的腳本。這種后端腳本一般要完成以下幾件事情:
1、解析http請求參數的到信息。
2、從服務器(WebServer)中獲取一些客戶端無法獲取的信息,如訪客ip等。
3、將信息按格式寫入log。
4、生成一副1×1的空gif圖片作為響應內容并將響應頭的Content-type設為image/gif。
5、在響應頭中通過Set-cookie設置一些需要的cookie信息。
之所以要設置cookie是因為如果要跟蹤唯一訪客,通常做法是如果在請求時發現客戶端沒有指定的跟蹤cookie,則根據規則生成一個全局唯一的 cookie并種植給用戶,否則Set-cookie中放置獲取到的跟蹤cookie以保持同一用戶cookie不變。這種做法雖然不是完美的(例如用戶清掉cookie或更換瀏覽器會被認為是兩個用戶),但是是目前被廣泛使用的手段。注意,如果沒有跨站跟蹤同一用 戶的需求,可以通過js將cookie種植在被統計站點的域下(GA是這么做的),如果要全網統一定位,則通過后端腳本種植在服務端域下。
參考文獻:
[1]google網站,https://developers.google.com/analytics/devguides/collection/gajs/
[2] http://blog.codinglabs.org/