位置: 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图片)

  • 淘宝省钱卡怎么邀请好友(淘宝省钱卡怎么取消自动续费)

    淘宝省钱卡怎么邀请好友(淘宝省钱卡怎么取消自动续费)

  • excel图案样式怎么设置(excel图案样式怎么设置为6.25%灰色)

    excel图案样式怎么设置(excel图案样式怎么设置为6.25%灰色)

  • 怎么把一个通知改成一条微信(怎么把一个通知改成具体信息)

    怎么把一个通知改成一条微信(怎么把一个通知改成具体信息)

  • 苹果xr为何每天不停要验证id(苹果xr一天多次黑屏什么情况)

    苹果xr为何每天不停要验证id(苹果xr一天多次黑屏什么情况)

  • 淘宝健康宝宝怎么看看(淘宝健康宝宝怎么退款)

    淘宝健康宝宝怎么看看(淘宝健康宝宝怎么退款)

  • 苹果7闪光灯怎么开启(苹果7闪光灯怎么突然用不起了)

    苹果7闪光灯怎么开启(苹果7闪光灯怎么突然用不起了)

  • 发现页管理是什么意思(发现页管理在哪)

    发现页管理是什么意思(发现页管理在哪)

  • qq视频电话对方没接能看到我吗(qq视频电话对方暂时无法接听是什么意思)

    qq视频电话对方没接能看到我吗(qq视频电话对方暂时无法接听是什么意思)

  • 耳机充电仓红灯闪烁(耳机充电仓红灯一直闪烁)

    耳机充电仓红灯闪烁(耳机充电仓红灯一直闪烁)

  • regedit怎么打开(regedit怎么打开分辨率)

    regedit怎么打开(regedit怎么打开分辨率)

  • 韩版手机和国行区别(韩版手机和国行手机有什么区别苹果)

    韩版手机和国行区别(韩版手机和国行手机有什么区别苹果)

  • 5g路由器支持什么手机(5g路由器什么时候上市)

    5g路由器支持什么手机(5g路由器什么时候上市)

  • vivo的耳机ipad能用吗(vivo的耳机能插到苹果手机用吗)

    vivo的耳机ipad能用吗(vivo的耳机能插到苹果手机用吗)

  • 苹果7是几寸的机身(苹果手机6.7寸有多大)

    苹果7是几寸的机身(苹果手机6.7寸有多大)

  • 微信活动账单怎么收钱(微信活动账单怎么查询)

    微信活动账单怎么收钱(微信活动账单怎么查询)

  • mate30pro如何关闭下拉搜索(mate30pro如何关闭系统更新)

    mate30pro如何关闭下拉搜索(mate30pro如何关闭系统更新)

  • 华为手机怎么设置白名单(华为手机怎么设置24小时制时间)

    华为手机怎么设置白名单(华为手机怎么设置24小时制时间)

  • 华为售后是免费检测么(华为手机上门维修)

    华为售后是免费检测么(华为手机上门维修)

  • 剪映草稿箱视频怎么保存到手机(剪映草稿箱视频丢失如何恢复)

    剪映草稿箱视频怎么保存到手机(剪映草稿箱视频丢失如何恢复)

  • 红魔手机背面灯怎么调(红魔手机后面有个呼吸灯吗)

    红魔手机背面灯怎么调(红魔手机后面有个呼吸灯吗)

  • 1psi等于多少nm(1PSI等于多少牛米)

    1psi等于多少nm(1PSI等于多少牛米)

  • 苹果11发售了吗(苹果11发售了吗现在价格)

    苹果11发售了吗(苹果11发售了吗现在价格)

  • x27nfc功能在哪里(vivox27nfc功能在哪里打开)

    x27nfc功能在哪里(vivox27nfc功能在哪里打开)

  • 为什么我的快手没有浏览设置(为什么我的快手没有赞赏功能)

    为什么我的快手没有浏览设置(为什么我的快手没有赞赏功能)

  • cpl滤镜的作用(相机uv镜和偏振镜哪个更有用)

    cpl滤镜的作用(相机uv镜和偏振镜哪个更有用)

  • 文件传输助手消息恢复(文件传输助手消息发不出去)

    文件传输助手消息恢复(文件传输助手消息发不出去)

  • 又一款Windows11要来,微软 Win11 SE 版本曝光(现在windows11)

    又一款Windows11要来,微软 Win11 SE 版本曝光(现在windows11)

  • 【HTML】HTML网页设计----动漫网站设计(html的网址)

    【HTML】HTML网页设计----动漫网站设计(html的网址)

  • 股东个人房产转入公司契税
  • 管理费用与税金及附加哪个会影响利润
  • 已注册登记的机动车有什么情形的
  • 预缴税款是什么科目
  • 计入税金及附加的税种口诀
  • 个体工商户税务申报如何网上申报
  • 个人所得税如果两份工作怎么扣
  • 个人所得税扣缴申报表
  • 飞机票退票费如何记账
  • 资产处置收益是什么意思
  • 税费滞纳金计入增值税吗
  • 权益法下被投资企业净资产增加
  • 工程在建期间的会计分录
  • 购进原材料发生非正常损失,账面成本10万元 该原材料
  • 外资企业银行贷款限制
  • 境外公司委托境内公司提供劳务
  • 出口企业退税流程
  • 快递费税率为什么是9
  • 一般纳税人施工费税率是多少
  • 发票涉税风险有哪些
  • 其他综合收益是什么类科目
  • 资金使用计划表怎么写
  • 个人购买经济适用住房享受减半征收契税优惠应报送
  • 出售已使用五年的住房有税收优惠吗?
  • 按揭的车可以只买交强险吗
  • windows7iis安装
  • 残保金通过什么科目核算
  • 冲减坏账准备和计提坏账准备
  • 企业送礼怎么办
  • 苹果手机微信怎么迁移聊天记录到新手机
  • php自学
  • scards32.exe - scards32是什么进程 有什么用
  • 怎样做好固定资产管理工作
  • win7系统无法启动怎么处理
  • php获取文本内容
  • 免费GPU:九天•毕昇平台使用教程
  • php去除指定字符
  • 员工出差过程中猝死赔偿
  • 白酒赠送消费税计算
  • 小程序navigator组件
  • bert模型能做什么
  • vue前端模板网站
  • pytorch多块gpu
  • cynefin框架
  • php如何做app
  • 可供出售金融资产公允价值变动
  • 员工办理健康证需要什么材料
  • 收到银联代收短信
  • 企业没有ca怎么登陆公积金账户
  • ps中如何使用切片工具
  • 怎么盘存货
  • 公司被吊销营业执照的法律后果是什么?
  • 车间装修预算表
  • 库存现金余额过大的风险
  • 化妆品消费税纳税标准
  • 居民企业只就其境内全部所得纳税
  • 财务报表中的存货包括哪些内容
  • 飞机票抵扣进项税申报表的填写
  • 中国的法律依据是什么
  • 新成立公司会计要做哪些事情
  • 原始凭证按来源分为
  • 成本会计工作主要内容
  • 便签windows
  • mac safari使用技巧
  • uup windows
  • yum providers命令
  • ie 无法打开
  • threejs中文文档pdf
  • css设置表格隔行换色
  • JavaScript—window对象使用示例
  • js获取父级元素
  • 关于android工程中的assets目录的正确说法
  • node.js的内置模块
  • Python爬取网易云音乐歌单内歌曲歌手封面播放地址
  • 能用python做什么
  • bootstrap js插件
  • python字符有哪些
  • python仿站软件官网
  • 税务局政务公开目录
  • 增值税可以抵扣多少
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设