位置: IT常识 - 正文

前端埋点需求(vue.js)(前端埋点sdk)

编辑:rootadmin
前端埋点需求(vue.js)

推荐整理分享前端埋点需求(vue.js)(前端埋点sdk),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:前端埋点插件,前端埋点和后端埋点的区别,前端埋点插件,前端埋点和后端埋点的区别,前端埋点方案,前端埋点技术是什么,前端埋点怎么写,前端埋点方案,内容如对您有帮助,希望把文章链接给更多的朋友!

提示:基于运营活动的需求,需要对用户行为进行埋点监控,因此以下文章是代码埋点的实现。

文章目录前言一、埋点思考二、埋点实现1.埋点工具类实现(operationLog.js)2.埋点监控的开启3.页面访问日志的写入4.点击事件的日志写入总结前言

前端埋点有两种:全局埋点、代码埋点。 全局埋点:收集的用户所有行为,但是收集的数据驳杂,要进行处理。 代码埋点:收集的用户所有行为更加精准,能够进行更细节的处理。

基于上述优缺点以及团队现状,因此采用代码埋点的方式来实现。

以下仅介绍关于前端的部分,至于登录次数、登录人数等均可完全靠后端进行实现

一、埋点思考

运营需求:用户浏览各页面情况(时长等),用户对各个规定元素的点击操作。 根据运营的需求我们需要做如下事: 1.对页面的访问,离开进行监控(包括关闭浏览器等操作)。  document.addEventListener(‘visibilitychange’)

前端埋点需求(vue.js)(前端埋点sdk)

2.对点击事件进行监控  采用vue自定义命令:v-log

3.避免耗费请求资源,需要批量的给后端发送前端操作日志  在离开页面的时候或每隔三分钟发送一次日志

4.避免日志内容丢失和错误  存储在本地localStorage中,一定要通过navigator.sendBeacon发送请求,若是不支持,则采用同步请求,避免发送不成功,成功后定时清除

二、埋点实现

以下代码是埋点封装类的实现,具体详解看注释

1.埋点工具类实现(operationLog.js)/* 用户操作相关的所有方法*/import store from '@/store/store'import router from '@/router/router'import { VueLocalStorage } from '@/utils/storage'class OperationLog {// 操作类型 operationType = { visit: 'PAGE_ACCESS',//访问行为 click: 'BUTTON_CLICK'//点击行为 } // 页面路由与标识符对应关系 visitPage = new Map([ [['/dashboard'], 'INSTRUMENT_PANEL_PAGE'], [['/incidents/list'], 'EVENT_ANALYZE_PAGE'], [['/incidentsVul/detail'], 'EVENT_ANALYZE_DETAIL_PAGE'], [['/application/main/monitor'], 'APPLICATION_MANAGE_MONITOR_PAGE'], [['/application/main/nomonitor'], 'APPLICATION_MANAGE_NOT_MONITOR_PAGE'], [['/application/detail/risk'], 'APPLICATION_DETAIL_RISK_LIST_PAGE'], [['/applicationVul/history'], 'APPLICATION_DETAIL_RISK_DETAIL_ATTACK_HISTORY_PAGE'], [['/applicationVul/info'], 'APPLICATION_DETAIL_RISK_DETAIL_VUL_INFO_PAGE'], [['/baseline/list'], 'BASELINE_INSPECT_PAGE'], [['/instance/list'], 'NODE_MANAGE_PAGE'], [['/instance/details/cpufusing', '/instance/details/baseline'], 'NODE_MANAGE_DETAIL_PAGE'], [['/blackWhite/main/black'], 'BLACK_LIST_MANAGE_PAGE'], [['/blackWhite/main/white'], 'WHITE_LIST_MANAGE_PAGE'], [['/strategy'], 'DEFEND_POLICY_MANAGE_PAGE'], [['/patch/main/list'], 'VIRTUAL_PATCH_PAGE'], [['/user/account', '/user/security', '/user/message'], 'PERSONAL_CENTER_PAGE'], [['/message/list'], 'MESSAGE_NOTIFICATION_PAGE'] ]) constructor () { this.timeOut = null// 记录定时器id this.timeNum = 60000 // 定时毫秒数 this.localKeyName = 'raspLog'// 存储本地数据key } start () { this.visibilitywindow() this.timer() } // 发送操作日志信息给后端 async reportData () { const data = VueLocalStorage.getJSON(this.localKeyName) || [] // 没有操作日志的时候不进行日志发送 if (!data.length) { return } const url = `/rasp/api-v1/data/event/track/push?Authorization=Bearer ${store.state.login.accessToken}` if (navigator.sendBeacon) { const blob = new Blob([JSON.stringify(data)], { type: 'application/json; charset=UTF-8' }) navigator.sendBeacon(url, blob) this.clearLog() } else { // 同步请求 const xhr = new XMLHttpRequest() xhr.open('POST', url, false) xhr.setRequestHeader('Content-Type', 'application/json; charset=UTF-8') xhr.send(JSON.stringify(data)) this.clearLog() } } // 监控窗口变化(锁屏,关闭等) visibilitywindow () { document.addEventListener('visibilitychange', () => { if (document.visibilityState !== 'visible') { // 离开页面 this.reportData() } else { // 进入页面 this.writeLog('visit', router.currentRoute.path) } }) } // 定时器 timer () { if (this.timeOut) { clearTimeout(this.timeOut) this.timeOut = null } this.timeOut = setTimeout(() => { this.reportData() this.timer() }, this.timeNum) } /* 记录操作信息 type(操作类型):visit/click operation:type为visit的时候是path路径,为click的时候是直接传给后端的字符 */ writeLog (type, operation) { const params = { // 要记录的单挑数据 eventType: this.operationType[type], functionType: '', createDate: Number.parseInt((new Date().getTime()) / 1000) } // 获取本地存储的数据 const localData = (VueLocalStorage.getJSON(this.localKeyName) || []) if (type === 'visit') { // 访问页面 // 根据路由找到对应页面的标识符 const functionType = Array.from(this.visitPage.entries()).find(item => { return item[0].some(path => path === operation) })?.[1] // 若是未找到对应的标识符则代表此页面路由不进行记录 if (functionType) { params.functionType = functionType } else { return } } else if (type === 'click') { // 点击元素 params.functionType = operation } // 记录前检查是否为重复数据 const repeat = (VueLocalStorage.getJSON(this.localKeyName) || []).some(item => { return item.eventType === params.eventType && item.functionType === params.functionType && item.createDate === params.createDate }) if (!repeat) { // 没有重复则进行记录 localData.push(params) VueLocalStorage.setJSON(this.localKeyName, localData) } } // 清空操作信息 clearLog () { localStorage.removeItem(this.localKeyName) }}const operation = new OperationLog()export function start () { operation.start()}export function writeLog (type, content) { operation.writeLog(type, content)}2.埋点监控的开启

在App.vue中

import { start } from '@/utils/operationLog.js' mounted () { start()// 开启日志监控 },3.页面访问日志的写入

路由拦截中进行写入日志

import { writeLog } from '@/utils/operationLog.js'router.beforeEach((to, from, next) => { writeLog('visit', to.path)})4.点击事件的日志写入

通过定义全局的vue命令进行写入

定义命令,在mai.js对指令进行全局引入

import { writeLog } from '@/utils/operationLog.js'// 记录点击日志Vue.directive('log', { bind: (el, binding, vnode) => { el.addEventListener('click', () => { writeLog('click', binding.value) }, false) }})

使用命令

<el-button v-log="'EVENT_ANALYZE_ADVANCED_SEARCH_BUTTON'">确认</el-button>总结

以上方法经过测试,可以对用户操作行为做到精准检测,除ie浏览器外,针对用户关闭、最小化、切出浏览器等操作行为进行监听且有效的上报。用户只需要在针对特殊操作如点击等使用v-log就能做到全面的监控。

本文链接地址:https://www.jiuchutong.com/zhishi/293041.html 转载请保留说明!

上一篇:超详细的正则表达式的使用方法,学不会找我(正则表达式大全(整理版))

下一篇:vue项目引入svg图标(完整步骤)(vue引入svg图片)

  • 苹果13pro悬浮球怎么打开(苹果13pro悬浮球怎么自定义)

    苹果13pro悬浮球怎么打开(苹果13pro悬浮球怎么自定义)

  • vivo手机怎么关闭地震预警(vivo手机怎么关闭hd高清通话)

    vivo手机怎么关闭地震预警(vivo手机怎么关闭hd高清通话)

  • 小米11和小米11青春版手机壳通用吗(小米11和小米11青春版手机壳一样吗)

    小米11和小米11青春版手机壳通用吗(小米11和小米11青春版手机壳一样吗)

  • 华为mate30pro卡槽在哪里(华为mate30pro卡槽弹不出来)

    华为mate30pro卡槽在哪里(华为mate30pro卡槽弹不出来)

  • 腾讯视频微信能2人用吗(腾讯视频微信能扫码登录吗)

    腾讯视频微信能2人用吗(腾讯视频微信能扫码登录吗)

  • oppoa5手机录屏怎么设置声音(oppoA5手机录屏怎么把声音录进去)

    oppoa5手机录屏怎么设置声音(oppoA5手机录屏怎么把声音录进去)

  • 海康威视摄像头不用录像机可以直接手机看吗(海康威视摄像头安装方法视频教程)

    海康威视摄像头不用录像机可以直接手机看吗(海康威视摄像头安装方法视频教程)

  • 电脑软件打开立马闪退(电脑软件打开应用程序没反应)

    电脑软件打开立马闪退(电脑软件打开应用程序没反应)

  • qq改马甲什么意思(qq里面的改马甲是什么意思?)

    qq改马甲什么意思(qq里面的改马甲是什么意思?)

  • 抖音免流量会显示吗(抖音免流量显示在哪里)

    抖音免流量会显示吗(抖音免流量显示在哪里)

  • b450能放哪些cpu(b450能带什么cpu)

    b450能放哪些cpu(b450能带什么cpu)

  • 照片怎么修改尺寸大小(照片怎么修改尺寸大一寸)

    照片怎么修改尺寸大小(照片怎么修改尺寸大一寸)

  • 华为p30省电模式怎么关(华为p30省电模式在哪里)

    华为p30省电模式怎么关(华为p30省电模式在哪里)

  • 拼多多客户不确认收货什么时候到账(拼多多客户不确认收货物流异常率)

    拼多多客户不确认收货什么时候到账(拼多多客户不确认收货物流异常率)

  • 抖音怎么解除公会签约(抖音怎么解除公司员工绑定)

    抖音怎么解除公会签约(抖音怎么解除公司员工绑定)

  • 钉钉投屏码怎么来(钉钉投屏码怎么输入)

    钉钉投屏码怎么来(钉钉投屏码怎么输入)

  • iphone7p支持18w快充吗(iphone7p支不支持18w快充)

    iphone7p支持18w快充吗(iphone7p支不支持18w快充)

  • 华为mate30pro和mate30保时捷有什么区别(华为mate30pro和mate50pro区别)

    华为mate30pro和mate30保时捷有什么区别(华为mate30pro和mate50pro区别)

  • vivoy66能改存储位置吗(vivoy67更改存储位置)

    vivoy66能改存储位置吗(vivoy67更改存储位置)

  • iphone账户怎么充值(iPhone账户怎么充值)

    iphone账户怎么充值(iPhone账户怎么充值)

  • 魅族多任务窗口在哪里(魅族多任务窗口怎么设置)

    魅族多任务窗口在哪里(魅族多任务窗口怎么设置)

  • 抖音时间锁原始密码(抖音时间锁原始密码忘了怎么办)

    抖音时间锁原始密码(抖音时间锁原始密码忘了怎么办)

  • wps手机版怎么删除页面(wps手机版怎么删除空白页)

    wps手机版怎么删除页面(wps手机版怎么删除空白页)

  • 中国制造网怎么注册(中国制造网怎么设置中文)

    中国制造网怎么注册(中国制造网怎么设置中文)

  • 小米MIX的摄像头像素(小米mix的摄像头怎么用)

    小米MIX的摄像头像素(小米mix的摄像头怎么用)

  • 餐饮小程序开发怎么做(餐饮小程序开发制作)

    餐饮小程序开发怎么做(餐饮小程序开发制作)

  • 电脑开机弹出documents文件夹解决方法(电脑开机弹出documents文件夹)

    电脑开机弹出documents文件夹解决方法(电脑开机弹出documents文件夹)

  • 微信小程序 四种弹窗方式(微信小程序四人游戏)

    微信小程序 四种弹窗方式(微信小程序四人游戏)

  • 出口退税无纸化备案
  • 税务制服的肩章是什么
  • 发票复核人一定要是财务吗
  • 发票收款人和复核没写可以用吗
  • 关联方交易的会计处理方法
  • 工程施工的借方和贷方
  • 临时设施摊销方案怎么写
  • 私企招残疾人可以辞职吗
  • 收购公司财务如何管理
  • 转让股权收入需要缴纳企业所得税吗
  • 下列支出不可以从其应纳税所得额中扣除的是
  • 设计、制造
  • 远期采购合同会查吗
  • 拍卖书画收入如何交税
  • 销售亏损原因分析范文
  • 物业公司收到开发代付物业管理费怎么做账
  • 代持股 税收
  • 股权转让过程中需要注意哪些问题
  • 4s店额外收取服务费
  • 其他应付款的会计英文
  • 自然人独资企业和一人有限责任公司
  • 上年未计提所得税会计
  • 一般企业可以开检测费吗
  • 企业外籍个人子女教育补贴
  • 调研费用表格
  • 用积分兑换礼品英语怎么说
  • 反避税的意义
  • 公司分期付款购车账务处理
  • 收到以前年度退回的企业所得税
  • 增值税预缴税款表电子版下载
  • 财务软件上线需注意什么
  • 进项发票大过销项,退税只退13个点的增值税吗
  • PHP:oci_new_collection()的用法_Oracle函数
  • 不符合条件的数据
  • 在Linux系统中安装Samba服务器
  • 苹果系统的声音
  • 劳务公司社保手续办理
  • 以旧换新的概念
  • uniapp支付流程
  • 贸易型企业能开什么增值税票
  • 如何用ai写代码
  • 商业企业营业收入
  • php循环字符串
  • websocket tcpsocket
  • 转增资本属于什么会计科目
  • 软件开发企业如何计算利润
  • 长期股权投资内部交易抵消
  • 报税金额和开票统计不一致
  • phpcms怎么用
  • 帝国cms下载
  • 劳务工资缴税标准
  • 政府对企业提交的项目申请报告主要从等方面进行核准
  • 购销合同没注明合同有效期
  • 个税手续费返还比例
  • 为什么要办理外地身份证
  • 总公司费用能分摊到分公司吗
  • 费用分摊科目
  • 公摊水电费计入什么科目
  • 应交税费应交增值税已交税金怎么用
  • 购买发票打印机如何账务处理?
  • 小规模纳税人计算公式
  • 施工图审查费计算公式
  • 应交增值税明细表公式
  • mysql分页实现
  • windows10 硬件
  • 如何隐藏文件夹并显示隐藏的文件夹
  • 进程mmc.exe
  • win8操作中心怎么关闭
  • linux字符串命令
  • 如何深度理解
  • vs2013怎么配置环境
  • vim多行匹配
  • 怎样关闭android系统的内存不足的系统通知
  • 使用Android Go的手机
  • android:excludeFromRecents="true"
  • disk指令
  • JavaScript中的case
  • 无法加载odbc驱动程序
  • 外经证核销在公司所在地还是在项目所在地
  • 大宗物流服务平台
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设