前端埋点需求(vue.js)

这篇具有很好参考价值的文章主要介绍了前端埋点需求(vue.js)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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


前言

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

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


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

一、埋点思考

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

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.toymoban.com/news/detail-412216.html

到了这里,关于前端埋点需求(vue.js)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 埋点是什么?有什么作用?前端如何埋点?

    埋点(tracking) 是指在应用程序中插入代码或工具来记录某些事件的行为和属性,例如用户在应用中的点击、浏览、购买、注册等操作行为。这些数据可以被用来分析用户行为、优化产品功能、改进用户体验等。通过埋点,开发人员可以采集用户数据,并将其发送到后台以进

    2024年02月09日
    浏览(23)
  • 前端埋点设计/小程序+友盟埋点方案

    所谓埋点就是在应用中特定的流程收集一些信息,用来跟踪应用使用的状况,后续用来进一步优化产品或是提供运营的数据支撑,包括访问数(Visits),访客数(Visitor),停留时长(Time On Site),页面浏览数(Page Views)和跳出率(Bounce Rate)。这样的信息收集可以大致分为两

    2024年02月10日
    浏览(32)
  • 前端埋点方式

    前言: 想要了解用户在系统中所做的操作,从而得出用户在本系统中最常用的模块、在系统中停留的时间。对于了解用户的行为、分析用户的需求有很大的帮助,想实现这种需求可以通过前端埋点的方式。 埋点方式: 1.什么是埋点? “埋点”是一种在应用程序或网站中插入

    2024年02月05日
    浏览(29)
  • 基于matomo实现业务数据埋点采集上报

    matomo是一款Google-analytics数据埋点采集上报的平替方案,可保护您的数据和客户的隐私;正如它官网的slogan: Google Analytics alternative that protects your data and your customers\\\' privacy; 该项目源码开源免费,支持私有化部署,保证数据安全、可靠;支持多种方式集成,不管你的应用是传统的

    2024年02月08日
    浏览(25)
  • 基于uni-app的埋点sdk设计

    onShow: function () { uni.showToast({ title: \\\'onShow\\\' }) }, { \\\"pageType\\\": \\\"leavePage\\\", \\\"networkType\\\": \\\"wifi\\\", \\\"pageInfo\\\": { \\\"pageUrl\\\": \\\"pages/index/newIndex\\\", \\\"title\\\": \\\"\\\" }, \\\"entryTime\\\": \\\"2024-04-10 13:18:50\\\", \\\"leaveTime\\\": \\\"2024-04-10 13:18:51\\\", \\\"nowTime\\\": \\\"2024-04-10 13:18:51\\\", \\\"stayTime\\\": 279, \\\"sysTemInfo\\\": { \\\"appName\\\": \\\"某某app\\\", \\\"appVersion\\\": \\\"2.1.4\\\",

    2024年04月11日
    浏览(21)
  • vue.js前端框架应用案例

    Vue.js 是一种流行的前端框架,它可以帮助开发者构建单页应用(SPA)和复杂的用户界面。以下是几个 Vue.js 的案例,涵盖了不同领域的应用: Vue.js 官方文档 :Vue.js 的官方文档本身就是一个使用 Vue.js 构建的项目。它展示了 Vue.js 的各种功能和最佳实践,包括组件、指令、混

    2024年02月21日
    浏览(30)
  • 前端开发 5: Vue.js 框架

    在前端开发中,Vue.js 是一个流行且灵活的 JavaScript 框架,用于构建用户界面。它采用了组件化的开发方式,使得前端开发更加模块化和可维护。在本篇博客中,我将为你介绍 Vue.js 的基础知识和常用技巧,帮助你更好地掌握前端开发中的框架部分。 Vue.js 是一个轻量级的 Jav

    2024年01月19日
    浏览(30)
  • 【前端技术】Vue3 01:初识 Vue.js

    Vue 可以说是非常流行了,至少在国内是这样,他是个轻量级的 JavaScript 框架,非常适合构建大型和中小型的 Web 应用程序,如果想和前端打交道,应该绕不过这个框架吧。 目录 1 Vue.js 介绍 2  IDE 选择 2.1 vscode 2.2 WebStorm 2.3 Eclipse 3  创建 Vue 应用 3.1 本地脚手架创建 ① 安装

    2024年02月02日
    浏览(43)
  • Vue.js 现代前端开发的利器

    作者:阿发家的阿花 在当今的前端开发领域,Vue.js已经成为最受欢迎的JavaScript框架之一。它的简洁性、灵活性和强大的功能使其成为许多开发者首选的工具。本文将介绍Vue.js的核心概念、主要特点以及为什么它在现代前端开发中如此重要。我们还将探讨Vue.js在构建交互式和

    2024年02月10日
    浏览(33)
  • 前端(四)——vue.js、vue、vue2、vue3

    😊博主:小猫娃来啦 😊文章核心: vue.js、vue、vue2、vue3从全局到局部 Vue.js是一款流行的JavaScript框架 vue,vue2,vue3都是vue.js的不同版本。 Vue:Vue.js的第一个版本,也称为Vue 1.x。它于2014年首次发布,并获得了广泛的应用和认可。 Vue2:Vue.js的第二个版本,也称为Vue 2.x。它在Vu

    2024年02月12日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包