在前端項目中,有時候需要統計頁面點擊量,或者用戶行為的數據,所以就有了前端數據監控,通過數據監控,可以對用戶行為進行分析,從而對業務的重點進行調整
埋點方式分類
手動埋點
純手動寫代碼,調用埋點SDK的函數,在需要埋點的業務邏輯功能位置調用接口上報埋點數據
//命令式 // 按鈕點擊時發送埋點請求 $('button').click(()=>{ // ... 業務邏輯 sendData(params); }); //聲明式 <button data-mydata="{key:'uber_comt_share_ck', act: 'click',msg:{}}">打車</button> //聲明了自定義屬性data-mydata,可以在SDK中去掃描和識別這些自定義屬性,並解析封裝數據,在SDK中按照自定義規則去綁定事件並發送埋點數據
//框架式
//框架都有自己的各種生命周期,為了減少重復性的手動埋點次數,可以在各個生命周期位置,根據你的需求封裝你所需的埋點
特點:數據精確度和詳細程度較高,但是對業務代碼侵入性高,項目工程量大,需要埋點的位置太多,維護困難,手動埋點的錯誤率
自動埋點
不需要工程師在業務代碼里面插入侵入式的代碼。只需要簡單的加載了一段定義好的SDK代碼
特點:部署簡單,數據全面,不容易遺漏,但是發送的埋點數量大(最好使用在那些按鈕不是很多的,相對簡單的頁面),數據精確度和詳細度不夠
埋點上報策略
- 實時上報:對實時性要求高的采用
由於網絡有時不穩定,或者一些原因導致埋點上報失敗,數據缺失,可以采用延時上報,把數據存在localStorage,上報過后刪除
有兩種延時方案可以選擇:
- 基於時間間隔:隔多長時間上報一次
- 基於數據條數:沒累積多少條數據上報一次
延遲上報丟失數據問題
延遲上報策略下,如果沒有達到數據上報的條件,用戶退出頁面,在用戶不再進入的情況下,本地數據無法上報
解決方案:
監聽頁面beforeunload事件,在頁面離開前把剩余不足N條的log全部上傳