最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript利用img實現(xiàn)前端頁面埋點功能

 更新時間:2022年06月16日 08:37:37   作者:諸葛小愚  
做數(shù)據(jù)分析的時候需要獲取足量的有效數(shù)據(jù),這個時候就需要我們在前端頁面埋點。如何來實現(xiàn)一個前端埋點功能,本文就帶你上手試試

做數(shù)據(jù)分析的時候,可能會遇到一個問題:如何獲取足量的有效數(shù)據(jù)。簡單記錄用戶登錄IP肯定是不能滿足要求的,這個時候就需要我們在前端頁面埋點,也就是數(shù)據(jù)采集點。如何來實現(xiàn)一個前端埋點功能,本文就帶你上手試試。

數(shù)據(jù)類型

首先,我們需要明確埋點需要哪些數(shù)據(jù),這個和具體的業(yè)務(wù)需求有關(guān)。但是我們設(shè)計的時候,還是應(yīng)該盡量考慮:

  • pv:頁面訪問量
  • uv:用戶訪問量
  • 自定義事件
  • 頁面性能加載數(shù)據(jù)
  • 報錯信息

埋點數(shù)據(jù)范圍清晰了,那么怎么來實現(xiàn)埋點呢?

技術(shù)方案

首先我們不建議使用ajax發(fā)送http的方式將埋點數(shù)據(jù)發(fā)送到服務(wù)端,原因主要有兩個:

  • 可能存在跨域的風(fēng)險,例如使用第三方的接口
  • 可能存在兼容性問題,例如使用fetch來發(fā)送請求就不兼容IE

其他原因也有,但不是主要的。這里,我們建議使用<img>或者<script>來實現(xiàn)埋點數(shù)據(jù)的發(fā)送,這兩個屬于原生的HTML屬性,兼容性比ajax要好很多,而且支持跨域。img和script如果要細分的話,還是有差異的,感興趣的朋友可以移步:詳解JavaScript發(fā)送埋點請求的兩種方式,本文將選擇img來實現(xiàn)埋點。

如何設(shè)計

在寫代碼前,可以先設(shè)計出代碼大概的結(jié)構(gòu),這樣在寫的時候才會思路清晰。在埋點數(shù)據(jù)中,性能分析和錯誤監(jiān)聽可能會復(fù)雜一點。性能分析可以使用performance.timing

performance的每一個屬性的作用節(jié)點可參考下圖:

錯誤監(jiān)聽可參考文章:如何監(jiān)聽Vue項目報錯的4種方式 

完整代碼

    class StatisticsSDK {
    constructor() {
      this.initPerformance(); // 性能分析
      this.initError(); // 錯誤監(jiān)聽
    }
    // 初始化性能分析
    initPerformance() {
      const url = 'xxx';
      this.send(url, performance.timing)
    }

    // 初始化錯誤監(jiān)聽
    initError() { 
      window.addEventListener('error', event => { 
        const {error, lineno, colno} = event;
        this.error(error, {lineno, colno})
      })
      // Promise 未catch的錯誤
      window.addEventListener('unhandledrejection', event => {
        this.error(new Error(event.reason), {type: 'unhandledrejection'})
      })
    }

    // 發(fā)送埋點數(shù)據(jù),作為公共方法被調(diào)用
    send(url, params = {}) {
      params.id = Date.now(); // 當(dāng)前時間戳
      const arr = [];
      for (let key in params) {
        arr.push(`${key}=${params[key]}`);
      }
      const newUrl = `${url}?${arr.join('&')}`; // 參數(shù)拼接在請求地址上
      // 使用img發(fā)送埋點數(shù)據(jù)
      // const img = new Image();
      // img.src = newUrl;
      const img = document.createElement('img');
      img.src = newUrl;
    }

    // 頁面訪問量
    pv() {
      const url = 'xxxx'
      // 調(diào)用send發(fā)送
      this.send(url, {key: 'pv', value: location.href})
    }

    // 自定義事件
    event(key, value) {
      const url = 'xxxx'; // 服務(wù)端地址
      // 調(diào)用send發(fā)送
      this.send(url, {key, value})
    }

    // 未捕獲的錯誤,或者用戶自行發(fā)送錯誤埋點數(shù)據(jù)時
    error(error, info = {}) {
      const url = 'xxx';
      const {message, stack} = error;
      this.send(url, {message, stack, ...info})
    }
  }
  const s = new StatisticsSDK();

總結(jié)

本文主要使用img來實現(xiàn)埋點數(shù)據(jù)的發(fā)送,考慮了跨域、兼容性,但是也存在比較大的缺陷:如果用戶禁用網(wǎng)頁加載圖片,那么將無法正常發(fā)送埋點數(shù)據(jù)。這種情況下,可以使用script實現(xiàn)本案例,兩者的差異可以參考詳解JavaScript發(fā)送埋點請求的兩種方式,可以使用script實現(xiàn)本案例。

到此這篇關(guān)于JavaScript利用img實現(xiàn)前端頁面埋點功能的文章就介紹到這了,更多相關(guān)JavaScript埋點功能內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • js代碼延遲一定時間后執(zhí)行一個函數(shù)的實例

    js代碼延遲一定時間后執(zhí)行一個函數(shù)的實例

    下面小編就為大家?guī)硪黄猨s代碼延遲一定時間后執(zhí)行一個函數(shù)的實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02
  • 深入理解JavaScript和TypeScript中的class

    深入理解JavaScript和TypeScript中的class

    class 聲明創(chuàng)建一個基于原型繼承的具有給定名稱的新類,下面這篇文章主要給大家介紹了關(guān)于JavaScript和TypeScript中class的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下。
    2018-04-04
  • JS實現(xiàn)瀏覽器狀態(tài)欄文字從右向左彈出效果代碼

    JS實現(xiàn)瀏覽器狀態(tài)欄文字從右向左彈出效果代碼

    這篇文章主要介紹了JS實現(xiàn)瀏覽器狀態(tài)欄文字從右向左彈出效果,涉及JavaScript結(jié)合時間函數(shù)遍歷字符串及動態(tài)改變狀態(tài)欄顯示效果的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-10-10
  • JS自動適應(yīng)的圖片彈窗實例

    JS自動適應(yīng)的圖片彈窗實例

    這篇文章介紹了JS自動適應(yīng)的圖片彈窗實例代碼,有需要的朋友可以參考一下
    2013-06-06
  • 淺談小程序globalData的那些事兒

    淺談小程序globalData的那些事兒

    這篇文章主要介紹了淺談小程序globalData的那些事兒,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • js單向鏈表的具體實現(xiàn)實例

    js單向鏈表的具體實現(xiàn)實例

    js單向鏈表的具體實現(xiàn)實例,可以排序,增加,查找,刪除的單向鏈表,需要的朋友可以參考一下
    2013-06-06
  • javascript?中動畫制作方法?animate()屬性

    javascript?中動畫制作方法?animate()屬性

    這篇文章主要介紹了javascript?中動畫制作方法?animate()屬性,animate是所有dom元素都有的方法,可以用來最做過度動畫,關(guān)鍵幀動畫,下面文章的相關(guān)介紹需要的小伙伴可以參考一下
    2022-04-04
  • JavaScript獲取當(dāng)前頁面url參數(shù)的方法詳解

    JavaScript獲取當(dāng)前頁面url參數(shù)的方法詳解

    這篇文章主要為大家詳細介紹了前端獲取當(dāng)前頁面url參數(shù)的一些常見方法,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-03-03
  • js/jquery獲取文本框輸入焦點的方法

    js/jquery獲取文本框輸入焦點的方法

    本篇文章主要是對js/jquery獲取文本框輸入焦點的方法進行了介紹,需要的朋友可以過來參考下,希望對大家有所幫助
    2014-03-03
  • 判斷復(fù)選框是否被選中的兩種方法

    判斷復(fù)選框是否被選中的兩種方法

    這篇文章主要介紹了判斷復(fù)選框是否被選中的兩種方法,經(jīng)測試還不錯,大家可以學(xué)習(xí)下
    2014-06-06

最新評論

阳曲县| 景宁| 永康市| 文化| 手游| 松原市| 南部县| 绍兴市| 宁武县| 济宁市| 定南县| 麻栗坡县| 普安县| 井陉县| 萨迦县| 治县。| 海城市| 抚远县| 江口县| 海兴县| 汤阴县| 合水县| 铁力市| 容城县| 阿克陶县| 金坛市| 息烽县| 仁化县| 呼图壁县| 万荣县| 湾仔区| 桓仁| 石台县| 和林格尔县| 山西省| 新河县| 达拉特旗| 益阳市| 黔江区| 绿春县| 资兴市|