前端埋點

来源:https://www.cnblogs.com/yangsg/archive/2020/07/08/13266601.html
-Advertisement-
Play Games

前端埋點主要是為了服務運營人員採集用戶行為數據,進行後續的數據分析工作。 前端監控和埋點能做什麼 數據監控(用戶行為) pv,uv 記錄操作系統 用戶在每一個頁面的停留時間(離開頁面,進入頁面) 用戶進入的入口 用戶在相應頁面的觸發行為,點擊按鈕 性能監控 (js中的performance) 用戶的 ...


 
前端埋點主要是為了服務運營人員採集用戶行為數據,進行後續的數據分析工作。

前端監控和埋點能做什麼

  • 數據監控(用戶行為)
    • pv,uv
    • 記錄操作系統
    • 用戶在每一個頁面的停留時間(離開頁面,進入頁面)
    • 用戶進入的入口
    • 用戶在相應頁面的觸發行為,點擊按鈕
  • 性能監控 (js中的performance)
    • 用戶的首屏載入
    • http請求響應時間
    • 頁面渲染時間
    • 頁面交互動畫完成時間 關鍵代碼
let timing = performance.timing,
start = timing.navigationStart,
dnsTime = 0,
tcpTime = 0,
firstPaintTime = 0,
domRenderTime = 0,
loadTime = 0;
//DNS解析時間
dnsTime = timing.domainLookupEnd - timing.domainLookupStart;
//TCP建立時間
tcpTime = timing.connectEnd - timing.connectStart;
//首屏時間
firstPaintTime = timing.responseStart - start;
//dom渲染完成時間
domRenderTime = timing.domContentLoadedEventEnd - start;
//頁面onload時間
loadTime = timing.loadEventEnd - start;

 

| 功能變數名稱( domain ) | javascript | document.domain ;獲取的值如:"domain" : "127.0.0.1" | | URL (url) | javascript | document.URL;獲取的值如:"url" : "http://127.0.0.1:3000/" | | 頁面標題 (title) | javascript | document.title;獲取的值如:"title" : "Express"; | | 上一跳url、referrer (referrer) | javascript | document.referrer;獲取的值如:"referrer" : "" ; | | 解析度 (height:sh; width: sw) | javascript | window.screen.height & width; 獲取的值如:"sh" : "1050" ,"sw" : "1680"; | | 顏色深度 (cd) | javascript | window.screen.colorDepth; 獲取的值如:"cd" : "32"; | | 客戶端語言 (lang) | javascript | navigator.language;獲取的值如:"lang" : "zh-CN"; | | user-agent header(userAgent) | javascript | navigator.userAgent;獲取的值如:"userAgent" : "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.82 Safari/537.36"; |

現有的前端埋點方案總結

  • 手動埋點 1.命令埋點,前端代碼中需要監控的地方插入監控邏輯
    // 頁面載入時發送埋點請求
    $(document).ready(function(){
    // ... 這裡存在一些業務邏輯
    sendRequest(params);
    });
    // 按鈕點擊時發送埋點請求
    $('button').click(function(){
    // 這裡存在一些業務邏輯
    sendRequest(params);
    });

     

    2.聲明式埋點 聲明式埋點的思路是將埋點代碼和具體的交互和業務邏輯解耦,開發者只用關心需要埋點的控制項,並且為這些控制項聲明需要的埋點數據即可,從而降低埋點的成本 ,在dom元素上增添埋點信息,如下 // key表示埋點的唯一標識;act表示埋點方式 <button data-stat="{key:'111', act: 'click'}">埋點</button>
  • 相比命令式埋點,不至於傻瓜式的在哪監控在哪埋點
  • 遍歷dom樹,找到[data-stat]元素的節點,綁定click事件,將[data-stat]上的信息發送給伺服器
  • 缺點: 1.遍歷DOM樹的時機問題,一個簡單的例子,一個表格的行數據是通過非同步載入,而表格行中的操作按鈕需要埋點,那麼在DOM ready的時候去遍歷,顯然是無法找到的 2.綁定埋點事件次數的問題,怎樣保證埋點事件不會被重覆綁定到元素上,一次操作發了N個埋點請求 重覆工作很多,還要處理冒泡。
  • 可視化埋點 業內開源解決方案:Mixpanel 與配套的可視化頁面搭建和 運營通過可視化的界面拖拽配置實現,這些活動控制項元素都帶有唯一標識。通過埋點配置後臺,將元素與要採集事件關聯起來,可以自動生成埋點代碼嵌入到頁面中。
  • 全埋點 無埋點則是前端自動採集全部事件,上報埋點數據,由後端來過濾和計算出有用的數據,優點是前端只要一次載入埋點腳本。缺點是流量和採集的數據過於龐大,伺服器性能壓力山大,主流的 GrowingIO 就是這種實現方案。
SDK就會自動追蹤頁面上的按鈕(a、button、input) 這種html標簽類型的點擊情況,一旦頁面某一個按鈕發生了點擊行為,SDK就會去採集此按鈕的一些信息,例如: 這個按鈕的標簽類型,這個按鈕的文本內容,這個按鈕的name,這個按鈕的id、class名,還有一些按鈕特有的屬性如href等。 比如click事件,在document上綁定click,在事件中的捕獲階段進行綁定,即使按鈕元素取消冒泡了,也跟不會影響捕獲階段的傳遞(在頁面中點擊一個元素,事件是從這個元素的祖先元素中逐層傳遞下來的,這個階段為事件的捕獲階段。當事件傳遞到這個元素之後,又會把事件逐成傳遞迴去,直到根元素為止,這個階段是事件的冒泡階段 ) 事件標識?怎麼唯一定位到某個頁面的元素,設定一個根節點,根節點到這個元素自頂向下的屬性名 缺點:dom結構可能會變,class 名字, 元素嵌套,很難唯一定位到
  • 美團實現方案 70%全埋點 + 30%手動埋點
在不同場景下我們需要選擇不同的埋點方案。例如對於簡單的用戶行為類事件,可以使用全埋點解決;而對於需要攜帶大量運行時才可獲知的業務欄位的埋點需求,就需要聲明式埋點來解決。從更高的層面來看

思考

前端路由
前端路由通過‘#’錨點,其本來加在URL中指示網頁的位置的,hash雖然出現在URL中,但不會被包括在HTTP請求中。它是用來指導瀏覽器動作的,對伺服器端完全無用,因此,改變hash不會重新載入頁面。 改寫history.replaceState
 

數據上傳方式

  • img標簽上傳
  • ajax
    • 帶來跨域問題

參考

免費開源的前端監控平臺(github):https://github.com/kisslove/web-monitoring    


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 腳本文件是utf-8,mysql資料庫utf-8; 運行mysql文件,在navicat打開,中文註釋亂碼 解決方法如下: 5.5和5.6版本修複中文亂碼後,運行mysql刪除腳本,資料庫存在遺漏的數據表 (遺漏數據表中存在主外鍵關係) 1.查詢資料庫的編碼格式 show variables lik ...
  • 教程 Flutter 和桌面應用的最新進展 譯】Flutter vs React Native vs Native:深度性能比較 Flutter 中的圖文混排與原理解析 告別 Flutter Channel,調用 Native API 僅需一行代碼! Flutter 核心原理與混合開發模式 我們用 ...
  • AJAX Asynchronous Javascript And XML"(非同步 JavaScript 和 XML),是指一種創建互動式網頁應用的網頁開發技術。通過在後臺與伺服器進行少量數據交換,Ajax 可以使網頁實現非同步更新。意味著可以在不重新載入整個網頁的情況下,對網頁的某部分進行更新。傳統的 ...
  • ​互聯網的高速發展促使互聯網企業對於網站等頁面的用戶體驗要求也越來越高,導致網站開發難度越來越大,於是一個新興職業應運而生——web前端工程師。因為互聯網時代的高速發展,公司企業的迫切需求web前端工程師,web人才成為各大公司名企爭搶的“香餑餑”。 ...
  • 簡介 http-server是一個簡單的零配置命令行http伺服器。 它足夠強大,足以用於生產用途,但它既簡單又易於破解,可用於測試,本地開發和學習 應用場景 1、區域網訪問靜態頁面 訪問本地電腦中的文件都是基於file協議,如果要開放我們的本地文件給區域網人員訪問,是不能使用file協議。得用h ...
  • 今天為什麼要給大家講解這個東西呢,因為css這部分,尤其是數值這部分感覺非常簡單,但是尤其是簡單的,卻很多人根本就沒有弄懂。所以今天就來講一下css的數值問題吧。大家還是好好聽一下吧。 width height 百分比 當元素的height、width設置為百分比時,分別基於包含它的塊級對象的高度、 ...
  • 今天面試了一個前端實習生,我問了一個比較簡單的問題,就是css如何實現元素垂直居中的問題,但是要說出多種方案。其實他說的不錯,基本上說到了flex佈局,grid佈局等下麵提到的佈局。還不錯,但是這幾種都是已經經常用的,老生常談,但是我想聽到他說一種用的比較少的解決方案,瞭解一下他學習的深度和廣度。但 ...
  • 許多同學是不是還在徘徊、猶豫、糾結的階段,想學怕學不好,甚至不知從何入手,下麵這篇文章幫助想轉行前端及想學好Web前端開發的同學們解決心中的困惑。 1HTML的學習 超文本標記語言(HyperTextMark-up Language簡稱HTML)是一個網頁的骨架,無論是靜態網頁還是動態網頁,最終返回 ...
一周排行
    -Advertisement-
    Play Games
  • GoF之工廠模式 @目錄GoF之工廠模式每博一文案1. 簡單說明“23種設計模式”1.2 介紹工廠模式的三種形態1.3 簡單工廠模式(靜態工廠模式)1.3.1 簡單工廠模式的優缺點:1.4 工廠方法模式1.4.1 工廠方法模式的優缺點:1.5 抽象工廠模式1.6 抽象工廠模式的優缺點:2. 總結:3 ...
  • 新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,同時可以不用再手動輸出模塊名稱,或調用路徑,包括負載均衡,這一切,由框架實現並提供了。新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。 ...
  • 本章將和大家分享ES的數據同步方案和ES集群相關知識。廢話不多說,下麵我們直接進入主題。 一、ES數據同步 1、數據同步問題 Elasticsearch中的酒店數據來自於mysql資料庫,因此mysql數據發生改變時,Elasticsearch也必須跟著改變,這個就是Elasticsearch與my ...
  • 引言 在我們之前的文章中介紹過使用Bogus生成模擬測試數據,今天來講解一下功能更加強大自動生成測試數據的工具的庫"AutoFixture"。 什麼是AutoFixture? AutoFixture 是一個針對 .NET 的開源庫,旨在最大程度地減少單元測試中的“安排(Arrange)”階段,以提高 ...
  • 經過前面幾個部分學習,相信學過的同學已經能夠掌握 .NET Emit 這種中間語言,並能使得它來編寫一些應用,以提高程式的性能。隨著 IL 指令篇的結束,本系列也已經接近尾聲,在這接近結束的最後,會提供幾個可供直接使用的示例,以供大伙分析或使用在項目中。 ...
  • 當從不同來源導入Excel數據時,可能存在重覆的記錄。為了確保數據的準確性,通常需要刪除這些重覆的行。手動查找並刪除可能會非常耗費時間,而通過編程腳本則可以實現在短時間內處理大量數據。本文將提供一個使用C# 快速查找並刪除Excel重覆項的免費解決方案。 以下是實現步驟: 1. 首先安裝免費.NET ...
  • C++ 異常處理 C++ 異常處理機制允許程式在運行時處理錯誤或意外情況。它提供了捕獲和處理錯誤的一種結構化方式,使程式更加健壯和可靠。 異常處理的基本概念: 異常: 程式在運行時發生的錯誤或意外情況。 拋出異常: 使用 throw 關鍵字將異常傳遞給調用堆棧。 捕獲異常: 使用 try-catch ...
  • 優秀且經驗豐富的Java開發人員的特征之一是對API的廣泛瞭解,包括JDK和第三方庫。 我花了很多時間來學習API,尤其是在閱讀了Effective Java 3rd Edition之後 ,Joshua Bloch建議在Java 3rd Edition中使用現有的API進行開發,而不是為常見的東西編 ...
  • 框架 · 使用laravel框架,原因:tp的框架路由和orm沒有laravel好用 · 使用強制路由,方便介面多時,分多版本,分文件夾等操作 介面 · 介面開發註意欄位類型,欄位是int,查詢成功失敗都要返回int(對接java等強類型語言方便) · 查詢介面用GET、其他用POST 代碼 · 所 ...
  • 正文 下午找企業的人去鎮上做貸後。 車上聽同事跟那個司機對罵,火星子都快出來了。司機跟那同事更熟一些,連我在內一共就三個人,同事那一手指桑罵槐給我都聽愣了。司機也是老社會人了,馬上聽出來了,為那個無辜的企業經辦人辯護,實際上是為自己辯護。 “這個事情你不能怪企業。”“但他們總不能讓銀行的人全權負責, ...