成人怡红院-成人怡红院视频在线观看-成人影视大全-成人影院203nnxyz-美女毛片在线看-美女免费黄

站長資訊網
最全最豐富的資訊網站

前端怎么埋點?淺析vue自定義指令進行前端埋點的方法

怎么進行前端埋點?下面本篇文章給大家介紹一下怎么通過Vue自定義指令實現前端埋點,希望對大家有所幫助!

前端怎么埋點?淺析vue自定義指令進行前端埋點的方法

(學習視頻分享:vue視頻教程)

在營銷活動中,通過埋點可以獲取用戶的喜好及交互習慣,從而優化流程,進一步提升用戶體驗,提高轉化率。

在之前的埋點方案實現中,都是在具體的按鈕或者圖片被點擊或者被曝光時主動通過事件去上報埋點。這種方法在項目中埋點比較少時還行,一旦項目中需要大量埋點時,不可避免的要添加很多業務代碼。也很大程度上造成了埋點邏輯與業務邏輯的高耦合。

為了改造這種情況,我們對于原有的埋點方式做了一些小改進,使得埋點效率得到了極大提升。

在闡述我們的埋點改造之前,有必要對埋點的一些常識做下簡單的了解。

埋點上報方式都有哪些?

要知道埋點的類型有很多,上報的方式也是五花八門。前端常見的埋點方法有三種:

  • 手動埋點
  • 可視化埋點
  • 無痕埋點

手動埋點,顧名思義就是純手動寫代碼,調用埋點 SDK 提供的函數,在需要埋點的業務邏輯中添加對應方法,上報埋點數據。這種也是之前一直在使用的方法。

可視化埋點是指通過可視化系統配置埋點,這種方式接觸的不是很多,就不展開說了。

無痕埋點,也叫自動埋點、全埋點。即對全局所有事件和頁面加載周期進行攔截埋點。

一般對哪些數據做埋點?

為了達到數據分析,便于后續的運營及產品策略調整的目的,一般需要對以下幾點做埋點統計:

  • 頁面埋點:統計用戶進入或者離開頁面的信息,如頁面瀏覽次數(pv)、瀏覽頁面人數(uv)、頁面停留時長、設備信息等
  • 點擊埋點:統計用戶在頁面瀏覽過程中觸發的點擊事件,如按鈕、導航或者圖片的點擊次數
  • 曝光埋點:統計具體元素是否得到有效曝光

需求分析

本文是基于最近項目中添加埋點的需求,我們需要的一種理想化方案是:

  • 埋點與業務盡量分離,埋點邏輯更應該是獨立于業務的
  • 盡量不對業務代碼有侵入
  • 約定規范,通過統一收口來處理埋點邏輯

由于項目是Vue開發的,所以考慮使用自定義指令的方式來完成埋點上報。選擇自定義指令的原因也是因為他能一定程度上能讓業務和埋點解耦。

頁面埋點在框架層面已經幫我們做掉了,這里主要關心的是點擊埋點和曝光埋點。

實現思路其實也很清晰:在需要埋點的DOM節點掛載特殊屬性,通過埋點SDK監聽掛載了相應屬性對應的事件,在事件觸發時進行埋點數據上報。

那么問題來了,怎么監聽呢?

對于點擊事件,我們可以采用addEventListener來監聽click事件。這很簡單。

對于元素的曝光就稍微有點麻煩了。

首先我們來看一下為什么需要監測曝光:

前端怎么埋點?淺析vue自定義指令進行前端埋點的方法

為了衡量用戶對產品的興趣程度,需要計算區域的點擊率(點擊次數/曝光次數)。為了保證點擊率的準確性,我們必須保證用戶真正的瀏覽到了這些產品(就比如上圖中最下方的機酒產品區域,由于需要滾動頁面,用戶才有可能看到這一區域)。

那么怎么判斷元素出現在頁面的可視區域呢?

按照以往的做法:監聽滾動事件,通過getBoundingClientRect()方法計算監測區域與視窗的位置,然后判斷元素是否出現在頁面的可視區域內。但是由于scroll事件的頻繁觸發,性能問題很大。

基于此,瀏覽器特意為我們打造了一個Intersection ObserverAPI,把性能相關的細節都處理掉,讓開發者只關心業務邏輯即可:

前端怎么埋點?淺析vue自定義指令進行前端埋點的方法

由于用戶瀏覽頁面的不確定性,還必須要避免重復的曝光行為。這個在曝光之后,移除觀察即可。

代碼實現

上面的需求分析還是比較抽象,下面讓我們結合代碼來看一下最終的實現。

Click 類封裝

點擊事件的處理相對比較簡單,每次點擊觸發數據上報即可:

// src/directives/track/click.js import { sendUBT } from "../../utils/ctrip"  export default class Click {   add(entry) {     // console.log("entry", entry);     const traceVal = entry.el.attributes["track-params"].value     const traceKey = entry.el.attributes["trace-key"].value     const { clickAction, detail } = JSON.parse(traceVal)     const data = {       action: clickAction,       detail,     }     entry.el.addEventListener("click", function() {       console.log("上報點擊埋點", JSON.parse(traceVal))       console.log("埋點key", traceKey)       sendUBT(traceKey, data)     })   } }

Exposure 類封裝

曝光的相對復雜一些。

首先通過new IntersectionObserver() 實例化一個全局_observer,如果得到有效曝光的(這里當元素出現一半以上則進行曝光),就去獲取 DOM 節點上的trace-key(埋點 key)和track-params(埋點 value)。

// src/directives/track/exposure.js import "intersection-observer" import { sendUBT } from "../../utils/ctrip"  // 節流時間調整,默認100ms IntersectionObserver.prototype["THROTTLE_TIMEOUT"] = 300  export default class Exposure {   constructor() {     this._observer = null     this.init()   }    init() {     const self = this      // 實例化監聽     this._observer = new IntersectionObserver(       function(entries, observer) {         entries.forEach((entry) => {           // 出現在視窗內           if (entry.isIntersecting) {             // 獲取參數             // console.log("埋點節點", entry.target.attributes);             const traceKey = entry.target.attributes["trace-key"].value             const traceVal = entry.target.attributes["track-params"].value             console.log("traceKey", traceKey)             console.log("traceVal", traceVal)              const { exposureAction, detail } = JSON.parse(traceVal)             const data = {               action: exposureAction,               detail,             }              // 曝光之后取消觀察             self._observer.unobserve(entry.target)                self.track(traceKey, data)           }         })       },       {         root: null,         rootMargin: "0px",         threshold: 0.5, // 元素出現面積,0 - 1,這里當元素出現一半以上則進行曝光       }     )   }    /**    * 元素添加監聽    *    * @param {*} entry    * @memberof Exposure    */   add(entry) {     this._observer && this._observer.observe(entry.el)   }    /**    * 埋點上報    *    * @memberof Exposure    */   track(traceKey, traceVal) {     // console.log("曝光埋點", traceKey, JSON.parse(traceVal));     sendUBT(traceKey, traceVal)   }  }

指令封裝

有了點擊和曝光類,下一步就是 Vue 指令的封裝了,也是之所以能實現半自動埋點的核心。

這里存在一個場景就是對于同一個按鈕或者圖片,同時存在既需要點擊埋點又需要曝光埋點的場景。所以在指令的設計時支持了單獨傳入和同時傳入的場景:

  • v-track:click|exposure
  • v-track:exposure
// src/directives/track/index.js import Vue from "vue" import Click from "./click" import Exposure from "./exposure"  // 實例化曝光和點擊 const exp = new Exposure() const cli = new Click()  Vue.directive("track", {   bind(el, binding) {     // 獲取指令參數     const { arg } = binding     arg.split("|").forEach((item) => {       // 點擊       if (item === "click") {         cli.add({ el })       } else if (item === "exposure") {         exp.add({ el })       }     })   }, })

同時需要在src/index.js引入即可:

import "./directives/track"

使用

在需要埋點的地方使用也是很簡單的:

<img   ref="imageDom"   trace-key="o_img"   v-track:click|exposure   :track-params="     JSON.stringify({       exposureAction: 's_pictures',       clickAction: 'c_pictures',       detail: {         value: '測試',       },     })   " />

不足

通過Vue自定義指令的一個簡單封裝,業務代碼和埋點代碼就達到了一定的解耦,相較之前,無論是埋點的開發成本還是維護成本都降低了很多。

但是這也只是一個最簡單的實現,還有很多情況需要考慮:

  • 曝光時頻次很高,是否可以考慮批量上報?
  • 用戶訪問一半頁面,突然切出,之后又重新進入,這種情況埋點又該如何上報?
  • 用戶設備不支持Intersection ObserverAPI 情況,是否要考慮向下兼容?

鑒于這套埋點方案還在不斷完善中,等后續完善并在業務中落地平穩運行后。我再分享其中的細節給到大家。

【相關視頻教程推薦:vuejs入門教程、web前端入門】

贊(0)
分享到: 更多 (0)
?
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
99久久免费精品国产72精品九| 曰本BBWW高潮BBWR| 黑人巨大VS苍井空| 成人影院YY111111在线| 自拍偷在线精品自拍偷99| 亚洲国产精品久久久久秋霞小 | 久久婷婷综合缴情亚洲狠狠| 国产精品成人免费视频网站 | 大胆顶级欧美艺术图片| 69女性XXXXⅩ丰满HD| 亚洲自偷自偷在线成人网站传媒| 性XXXX视频播放免费| 少妇高潮惨叫久久久久久电影| 欧美成人精品在线| 开丫头小嫩苞疼死了| 精品少妇人妻AV一区二区| 国产偷窥真人视频在线观看| 高雅人妻被迫沦为玩物| 拜托了老师动漫第二季| 99久久国产福利自产拍| 把腿扒开做爽爽视频| 国产成人亚洲精品无码影院BT| 厨房丝袜麻麻被进进出出| А√天堂中文在线资源BT在线| 51CG今日吃瓜热门大瓜| OM老熟女HDXⅩXXX69| JAPANESE日本护士XXX| 97超级碰碰碰久久久久| 中文字幕无码肉感爆乳在线 | 视频视频APP在线看| 人妻少妇精品视频专区| 欧美巨大XXXX做受中文字幕| 免费直播视频在线观看| 蜜桃久久精品成人无码AV| 巨粗进入警花哭喊求饶| 人妻少妇粗大持久满足| 无码人妻丰满熟妇区免费 | 成人性欧美丨区二区三区| 国产午夜视频在线观看720P| 国产手机AV片在线无码观你| 久久久久亚洲AV成人人电影软件| 久久人妻无码一区二区三区AV| 欧美性狂猛XXXXXBBBBB| 人妻AⅤ中文字幕| 人妻少妇一区二区三区| 午夜亚洲AⅤ无码高潮片| 午夜熟女插插XX免费视频| 亚洲综合精品香蕉久久网| 亚洲丰满少妇多毛大隂户| 亚洲国产欧美国产综合久久| 亚洲精品无码av中文字幕电影网站 | 韩国亚洲精品A在线无码| 国产真实乱对白精彩| 狠狠色噜噜狠狠狠狠色综合久AV| 免费无码的AV片在线观看| 玩乡下黄花小处雏女| 亚洲AV成人无码精品电影在线| 亚洲成AV人片在线观看| GV无码免费无禁网站男男| 国产午夜性春猛交ⅩXXX| 内射猛交XXXXⅩX最新消息| 漂亮人妻被中出中文字幕久久| 人人妻人人澡人人爽人人精品电影| 日韩精品成人一区二区三区| 天天玩天天玩天天玩| 亚洲А∨天堂久久精品PPYPP | 国产午夜成人无码免费看| 男生把小j放进女人屁股视频狂躁| 新妺妺窝人体色7777太粗| 91蜜桃传媒精品久久久一区二区 | 好爽好紧好大的免费视频国产| 人妻丝袜中文无码AV影音先锋专| 日本A级视频在线播放| 亚洲精选无码久久久| 1688.COM成品网站入口| 被老头侵犯的人妻| 国产精品制服一区二区| 精品无码人妻一区二区三区不卡| 日韩高清在线中文字带字幕| 亚洲自偷自拍另类小说| 国产精品嫩草影院永久… | 久久香蕉综合色一综合色88 | 一个吃我奶头两个舔我下面| 99久久无码一区人妻| 国内精品久久久久精品| 久久人妻少妇嫩草AV蜜桃| 偷玩朋友熟睡人妻| 亚洲一区二区三区无码影院| 99久久综合狠狠综合久久| 含羞草自慰抽搐喷白浆AⅤ| 林静公交车被做到高C的原因| 人体内射精一区二区三区| 亚洲中文字幕无码中文字| 国产精品毛片AV一区二区三区| 精品日韩欧美一区二区在线播放| 熟妇人妻久久中文字幕老熟妇| 亚洲成AV人在线观看| 粉嫩av一区二区精品爆乳| 护士长在办公室躁BD| 欧美猛少妇色XXXXX猛叫| 亚洲精品中文字幕无码蜜桃| 国产精品无码A∨精品影院APP| 人人妻人人澡AV| 19岁MACBOOKPRO免费| 久久久久99精品成人片试看| 免费看行情的网站| 天天爽夜夜爽人人爽一区二区| JAVAPARSER偷乱中国| 麻豆三级电影无码| 无码精品人妻一区二区三区涩爱 | 一道本在线视频不卡| 极品教师第二季免费观看| 女女互揉吃奶揉到高潮视频| 午夜精品一区二区三区在线视| 中国鲜肉GAY高中XX禁18网 | 岳今晚让我玩个够肥水一体探岳体| 成人片国产精品亚洲| 欧美成人一区二区三区在线视频| 一区二区在线视频| 久久久国产精品ⅤA麻豆LL| 亚洲国产精品久久久久制服| 国产三级久久久精品麻豆三级| 同学故意把我的校服当抹布用作文 | 啊灬啊灬啊灬快灬深用力| 女人自熨全过程视频免费| 中国人妻XXXXX免费看| 国产精品第一区揄拍无码| 色哟哟最新在线观看入口| 在线观看AV无需播放器| 久久久久久久极品内射| 亚洲开心婷婷中文字幕| 好爽毛片一区二区三区四| 亚洲国产成AV人天堂无码| 好大好厉害我接了一个顾客| 亚洲AV无码一区二区二三区下载| 潮喷大喷水系列无码| 麻花豆传媒剧国产MV入口| 影音先锋亚洲亚洲色图| 国产无套码AⅤ在线观看在线播放| 无码人妻精品一区二区三区免费| 国产超碰人人做人人爽AV大片| 年轻丰满的继牳3免费看| 24小时在线看免费观看直播| 蜜臀av免费一区二区三区观看| 中文字幕无码免费久久| 女人国产香蕉久久精品| AV无码久久久久不卡网站蜜桃| 精品无码一区二区三区爱欲九九| 亚洲国产精品久久久久秋霞影院| 精品国品一二三产品区别在线观看| 天天天狠天天碰天天爱| 国产精品亚洲二区在线观看| 性饥渴少妇AV无码毛片| 极品人妻被黑人中出种子| 亚洲乱色伦图片区小说| 老公和小三在车上做我想卖了车| 综合图区亚洲欧美另类图片| 欧美国产日韩久久MV| 中国老太婆BB无套内射| 欧美黑人疯狂性受XXXXX喷水| 扒开腿狂躁女人爽出白浆| 少妇人妻无码专区视频免费| 国产麻豆放荡AV剧情演绎| 少妇被猛烈进入到喷白浆| 国产精品久久香蕉免费播放| 亚洲AV无码精品色午夜APP| 久久99久久99精品免观看吃奶| 性无码免费一区二区三区屯线| 国产AV成人一区二区三区高清| 日本少妇自慰免费完整版| 99亚偷拍自图区亚洲| 日韩乱码人妻无码系列中文字幕| CHINESE熟女老女人HD视频| 老男人吃奶疯狂啃肿奶头| 97人妻人人揉人人躁人人| 美女高潮潮喷出白浆视频| AV天堂午夜精品一区二区三区| 日韩AV无码中文字幕| 国产精品无码无卡在线观看久 | 国产婷婷内射精品1区| 亚洲欲色欲色XXXXX在线观看 | 18款夜间禁用粉色短视频软件 | 无人区码一码二码三码区别图片| 丁香激情五月中文字幕亚洲 | 国产精品情侣呻吟对白视频| 亚洲人成人一区二区在线观看| 孩交乱子XXXX高清影视| 在线观看AV黄网站永久| 日本WWW一道久久久免费榴莲| 国产美女遭强高潮开双腿| 野花社区在线观看免费直播WWW| 热99RE久久免费视精品频| 国产乱人伦AV在线无码| 又粗又黄又猛又爽大片APP| 日本少妇内射XXⅩⅩⅩⅩⅩⅩ| 国产熟女真实乱精品视频| 最新永久无码AV网址亚洲| 窝窝人体色WWW聚色窝| 久久综合亚洲色一区二区三区 | 日本乱熟人妻精品乱码涩爱|