beforeunload丟失率統計

轉自:http://ued.taobao.com/blog/2012/08/23/the_loss_rate_statistics_of_beforeunload/

        用戶體驗研究過程中,我們經常需要使用前端腳本採集用戶訪問行爲相關的數據,例如監聽鼠標的點擊事件,記下點擊的位置及被點擊的元素等。一個不可避免問題是,何時將採集到的數據發送到服務器呢?最直接的方案是每次收集到數據後立即發送,但這可能會帶來較多的HTTP請求,一方面降低頁面的性能,另一方面也增加了打點服務器的壓力。另一個方案是先將收集的數據緩存一下,然後按一定規則發送(比如每收集滿10條數據發一次,或者每隔5秒鐘發一次),其中最終極的方案是所有的數據都緩存起來直到離開頁面之前(beforeunload事件觸發時)再發送。不過這個終極方案也有自己的問題,比如beforeunload這個事件可靠嗎?在這個事件中發送打點的丟失率有多少?近期我們就這些問題做了一個研究,對這個丟失率也有了一個更具體的認識。主要的研究過程如下:

        首先我們需要收集數據,這兒主要有兩個數據:頁面加載時立即發送一個打點,稱爲PV打點;監聽頁面的beforeunload事件,在這個事件觸發時再發送一個打點,稱爲unload打點。顯然,如果丟失率爲0或非常小的話,PV打點的數目和unload打點的數目應該相等或非常接近。即丟失率的計算公式爲:丟失率=(PV-unload)/PV*100%

        如下圖所示:


        按這個思路,我們在淘寶頁面上進行了抽樣埋點,並取得了足夠多的PV及unload打點數據。但現實總是不完美的,整理這些數據的過程中,我們發現一些unload數據沒有對應的PV數據,也就是說,由於各種各樣的原因,不僅綁定beforeunload事件的unload打點有可能丟失,在頁面初始化時發送的PV打點也可能丟失,儘管這個概率非常低。於是,我們又爲打點添加了一個pvid參數,值爲一個隨機生成的字符串,每一組PV/unload打點的pvid都是相同的。這樣,我們就能通過這個參數過濾出那些完整的PV/unload打點記錄,再經過一些適當的整理,我們就得到了可以進行統計的有效數據。

        接下來,根據上面的公式,我們算出了beforeunload打點的總丟失率,約爲20.81%,整個過程如下圖所示:


        使用上面的方法我們連續統計了若干天的數據,發現beforeunload的總體丟失率維持在20%附近。接下來,我們再把這個數據按瀏覽器進行細分,看各個瀏覽器下這個丟失率是否有差異。

        首先看一下當前瀏覽器分佈情況:


        清洗過的日誌數據再根據UA字段細分後的結果爲:


        從上圖可以看到,各大瀏覽器的表現並不一樣,其中份額佔比最大的IE8在丟失率上表現最好,遠低於總體平均水平,而chrome和safari卻遠高於平均值。各瀏覽器的丟失率乘以它們各自的權重(市場份額)之後再求和,就得到了總的平均丟失率,在我們的實驗中,這個總丟失率約爲20%。

        結論:使用beforeunload事件打點並不可靠,總丟失率在20%左右,其中各瀏覽器的表現各不相同;當然在一些丟失率要求不高的採集任務中這個事件還是能派上用場的,比如說統計頁面停留時間、頁面內容曝光比例等。

        最後需要特別說明的是:丟失率與用戶瀏覽器分佈情況、所採用的打點方式以及打點服務器響應速度等因素都有關,本結果僅供參考。

        統計人:魚相、季札。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章