4、異常
這里的異常是指 JS 的異常,用戶的瀏覽器上報 JS 的 bug,這會極大地降低用戶體驗,對于瀏覽器型號、版本滿天飛的今天,再 NB 的程序員也難免會有擦槍走火的時候,當然 QA 能夠覆蓋到大部分的 bug,但肯定也會有一些 bug 在線上出現(xiàn)。JS 的異常捕獲只有兩種方式:window.onerror、try/catch,關于我們是如何做的將在后續(xù)的文章中有詳細的描述,這里只列出捕獲到異常時,一般需要采集哪些信息(主要用來 debug 異常):
- 異常的提示信息:這是識別一個異常的最重要依據(jù),如:’e.src’ 為空或不是對象
- JS 文件名
- 異常所在行
- 發(fā)生異常的瀏覽器
- 堆棧信息:必要的時候需要函數(shù)調(diào)用的堆棧信息,但是注意堆棧信息可能會比較大,需要截取
5、其他
除了上面提到的 4 類基本的數(shù)據(jù)統(tǒng)計需求,我們當然還可以根據(jù)實際情況來定義一些其他的統(tǒng)計需求,如用戶瀏覽器對 canvas 的支持程度,再比如比較特殊的 — 用戶進行輪播圖翻頁的次數(shù),這些數(shù)據(jù)統(tǒng)計需求都是前端能夠滿足的,每一項統(tǒng)計的結(jié)果都體現(xiàn)了前端數(shù)據(jù)的價值。
如何采集?
在前端,通過注入 JS 腳本,使用一些 JS API(如:!!window.localStorage 就可以檢驗瀏覽器是否支持 localStorage)或者監(jiān)聽一些事件(如:click、window.onerror、onload 等)就可以得到數(shù)據(jù)。捕獲到這些數(shù)據(jù)之后,需要將數(shù)據(jù)發(fā)送回服務器端,一般都是采用訪問一個固定的 url,把數(shù)據(jù)作為該 url 的 query string,如:http://www.baidu.com/u.gif?data1=hello&data2=hi。
在實踐的過程中我們抽離了一套用于前端統(tǒng)計的框架alog,方便開發(fā)者書寫自己的統(tǒng)計腳本,具體的使用方法和 API 見github。下面就使用 alog 來簡單說明如何進行前端數(shù)據(jù)的采集:
例如:你需要統(tǒng)計頁面的 PV,順便加上頁面來源(refer)
// 加載 alog,alog 是支持異步的void function(e,t,n,a,o,i,m){e.alogObjectName=o,e[o]=e[o]||function(){(e[o].q=e[o].q||[]).push(arguments)},e[o].l=e[o].l||+new Date,i=t.