前端埋点方式

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

前言:
想要了解用户在系统中所做的操作,从而得出用户在本系统中最常用的模块、在系统中停留的时间。对于了解用户的行为、分析用户的需求有很大的帮助,想实现这种需求可以通过前端埋点的方式。
埋点方式:
1.什么是埋点?
“埋点”是一种在应用程序或网站中插入代码的方式,用于收集用户行为或特定事件(点击事件、浏览时间、搜索事件等)的信息。它是用于分析和监控用户行为、应用性能和其他指标的一种方法。
2.埋点的目的
为了收集关键的数据和指标,以便帮助了解用户的行为、改进用户的体验、·优化应用性能、支持业务决策
3.埋点收集的数据类型
(1)用户行为类型:例如:页面浏览量、点击事件、表单提交、购买行为等
(2)应用性能数据:例如:页面加载时间、API调用延迟、错误日志等
(3)设备和环境数据:例如:用户设备类型、操作系统、浏览器版本等
(4)用户属性数据:例如:用户ID、地理位置、用户角色等
4.常见的埋点方式
(1)手动埋点:开发人员在代码中显示的插入埋点代码,通常使用Javascript或其他编程语言实现。(比较常用的方法)
(2)自动埋点:使用自动化工具或框架,自动收集 某些标准事件或用户行为数据
(3)可视化埋点:使用可视化工具,在页面上直接选择元素或交互,并配置要捕获的事件
5.常用埋点方法实例
(1)基于ajax的埋点上报
因为埋点实际上是对关键节点的数据进行上报和服务端交互的一个过程,所以我们可以和后端约定一个接口通过ajax进行数据上报。

代码如下:

function buryingPointAjax(data) {
	return new Promise((resolve, reject) => {
		// 创建ajax请求
		const xhr = new XMLHttpRequest()
		// 定义请求接口
		xhr.open("post", '/buryingPoint', true)
		// 发送数据
		xhr.send(data)
	})
}

// 使用
let info = {}
buryingPointAjax(info) // 这样就成功上报了info的对象

缺点:
一般而言,埋点域名并不是当前域名,因此请求会存在跨域风险,且如何ajax配置不正确可能会被浏览器拦截。因此使用ajax请求并不是万全之策

(2)基于img的埋点上报
数据上报前端主要是负责将数据传递到后端,并不过分强调前后端交互,因此可以通过一些支持跨域的标签去实现数据上报功能。script、link、img就是我们上报的数据最好对象,推荐使用img标签去实现。如果需要请求script和link,我们需要将标签挂载到页面上,会反复操作dom造成页面性能受影响,而且载入js/css资源还会阻塞页面渲染,影响用户体验,所以选择使用script和link进行埋点的话要慎重考虑。而img标签并不需要挂载到页面上,基于js去new image(),设置src后就可以直接请求图片。

代码如下:

// 控制台创建一个image标签
var img = new image()
img.src="https://lf3-cdn-tos.bytescm.com/obj/static/xitu_juejin_web/img/MaskGroup.13dfc4f1.png"

可以看到即使未被挂载到页面上依旧发起了请求
前端埋点方式,前端,okhttp

// 创建script标签
let a = document.createElement('script')
a.src = 'https://lf-headquarters-speed.yhgfb-cn-static.com/obj/rc-client-security/web/stable/1.0.0.28/bdms.js'

创建一个script标签,未挂载到页面上,并不会发起请求
前端埋点方式,前端,okhttp

// 将标签挂载到页面上
document.body.appendChild(a)

这个时候就可以看到发起请求了
前端埋点方式,前端,okhttp
(3)基于Navigator.sendBeacon的埋点上报
Navigator.sendBeacon是目前通用的埋点上报方案。Navigator.sendBeacon方法接受两个参数,第一个参数是目标服务器的URL,第二个参数是所要发送的数据(可选),可以是任意类型(字符串、表单对象、二进制对象等等)。
navigator.sendBeacon()方法可用于通过HTTP POST将少量数据异步传输到Web服务器。它主要用于将统计数据发送到Web服务器,同时避免了用传统技术(XMLHttpRequest)发送分析数据的一些问题。

注:sendBeacon如果成功进入浏览器的发送队列后,会返回true;如果受到队列总数、数据大小的限制后,会返回false。返回ture后,只是表示进入了发送队列,浏览器会尽力保证发送成功,但是否成功,不会再有任何返回值。

例子:
前端埋点方式,前端,okhttp
发送了一个post请求,将小量的数据发送到服务端,用于统计数据
前端埋点方式,前端,okhttp
相较于img标签,使用navigator.sendBeacon会更规范,数据传输上可传输资源类型会更多。
对于ajax在页面卸载时上报,ajax有可能没上报完,页面就卸载了导致请求中断,因此ajax处理这种情况时必须作为同步操作。
sendBeacon是异步的,不会影响当前页到下一个页面的跳转速度,且不受同域限制。这个方法还是异步发出请求,但是请求和当前页面脱离关联,作为浏览器的任务,因此可以保证会把数据发出去,不拖延卸载流程。

结论
1.img兼容性好
2.无需挂载到页面上,反复操作DOM
3.img的加载不会阻塞html的解析,但img加载后并不渲染,它需要等待Render Tree生成完之后才和Render Tree一起渲染出来
4.通常埋点上报会使用gif图,合法的GIF只需要43字节
5.不推荐ajax
6.考虑兼容性的话,img是不二之选
7.最适合的方案是Navigator.sendBeacon

6.常见的埋点行为

点击触发埋点

// 绑定点击事假,当点击目标元素时,触发埋点上报
function clickButton(url, data) {
	navigator.sendBeacon(url, data)
}

页面停留时间上报埋点

// 路由文件中,初始化一个startTime,当页面离开时通过路由守卫计算停留时间
let url = ''// 上报地址
let startTime = Date.now()
let currentTime = ''
router.beforeEach((to, from, next) => { 
     if (to) {
         currentTime = Date.now()
         stayTime = parseInt(currentTime - startTime)
         navigator.sendBeacon(url, {time: stayTime})
         startTime = Date.now()
     }
 })

错误监听埋点

// 通过监听函数去接收错误信息
// vue错误捕获
app.config.errorHandler = (err) => {
navigator.sendBeacon(url, {error: error.message, text:'vue运行异常'})

// JS异常与静态资源加载异常
window.addEventListener('error', (error) => {
	if(error.message) {
		navigator.sendBeacon(url, {error: error.message, text:'js执行异常'})
	} else {
		navigator.sendBeacon(url, {error: error.filename, text: '资源加载异常'})
	}
})

// 请求错误捕获
axios.interceptors.response.use(
	(response) => {
		if(response.code === 200) {
			return Pormise.resolve(response)
		} else {
			return Promise.reject(response)
		}
	},
	(error) => {
		// 返回错误逻辑
		navigator.sendBeacon(url, {error: error, text: '请求错误异常'})
	}
)

内容可见埋点

// 通过交叉观察器去监听当前元素是否出现在页面

// 可见性发生变化后的回调
function callback(data) {
	navigator.sendBeacon(url, {target: data[0].target, text: '内容可见'})
}
// 交叉观察器配置项
let options = {}
// 生成交叉观察器
const observer = new IntersectionObserver(callback)
// 获取目标节点
let target = document.getElementById("target")
// 监听目标元素
observer.observe(target)

其他更详细埋点内容可参考:https://mp.weixin.qq.com/s/lQos8C9y_6-ZT886k3aR9g文章来源地址https://www.toymoban.com/news/detail-744259.html

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

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

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

相关文章

  • Java之okhttp3请求方式

    在java开发中,发起http请求是非常常见的需求,常用的有HttpClient,下面聊一下okhttp3的请求方式。 1、引入okhttp3依赖 2、提供springboot工程及http接口 3、http请求 4、请求结果 get请求 post请求 form表单请求 可见发起http请求还是挺方便的,感兴趣的小伙伴可以试试~~~///( v )~~~

    2024年02月13日
    浏览(40)
  • 使用OkHttp发送POST请求的几种方式

    本文将介绍 OkHttp 客户端的基本用法。 主要介绍 OkHttp 3.x 版本中发送Post请求的几种方式。 使用 FormBody.Builder 构造基本的 RequestBody , 包含两个参数:用户名、密码,发送 POST请求。 如果要对请求进行身份验证,可以使用 Credentials.basic 构建器向请求头中添加凭据。 下面代码给

    2024年02月13日
    浏览(44)
  • java通过okhttp方式实现https请求的工具类(绕过证书验证)

    引入相关依赖包 2.1、跳过证书配置类 跳过证书配置类代码 2.2、okhttp方式的 https工具类 okhttp方式的 https工具类代码 测试代码 测试输出结果

    2024年01月23日
    浏览(92)
  • 数据埋点2

    作为数据分析师的你,是否和我一样经常会被业务方拿着两个不同数据平台的报表数据进行灵魂拷问。下面的场景你应该在熟悉不过了。 后来,我向另外一个数据平台的相关人员咨询之后,发现他们统计DAU的最小单位是open_id,不同的统计口径会造成一定的数据差异。而统计口

    2024年02月02日
    浏览(26)
  • 什么是埋点,有案例

    埋点(Track)是指在应用程序、网站或平台中添加代码,以记录特定用户行为和事件的做法。通过添加埋点代码,可以观察和分析用户行为,以调整和改进产品设计和使用体验。 在互联网应用中,常用的一些埋点行为包括: - 页面浏览次数及时长; - 用户交互行为(例如点击

    2024年02月11日
    浏览(35)
  • 浅谈埋点及其质量保障

    埋点又称为事件追踪(Event Tracking),指的是针对用户行为或事件进行捕获、处理和发送的相关技术及其实施过程。用大白话说:就是通过技术手段“监听”用户在APP、网站内的行为。 如果我们想要收集用户行为数据,就可以通过埋点来实现。 比如想要了解一个用户在APP里面

    2024年02月05日
    浏览(34)
  • Matrix代码零侵入自动埋点

    本文链接:https://blog.csdn.net/feather_wch/article/details/131693055 包含内容: 应用启动流程与卡顿监控的关系 卡顿监控原理分析与缺陷 微信是如何实现卡顿监控的 无侵入埋点技术实践 遇到卡顿问题怎么办? 用工具进行分析 CPU Profile Systrace layoutinspect 性能优化和framework原理学习区别

    2024年02月15日
    浏览(36)
  • 【埋点探针】微信小程序SDK安装

    选择Wechat,复制sdk代码 在项目根目录下,创建sdk文件,webfunny.event.js 首先引入sdk代码 引入兼容代码,兼容代码是为了防止SDK加载失败时,避免埋点代码可能因找不到方法的问题。需要手动执行,在代码最开始的地方执行一次即可。 一般获取userId需要在登录之后,这一步可以

    2024年04月26日
    浏览(30)
  • B端产品经理学习-如何进行埋点

    目录: 为什么要做埋点 如何埋点 埋点的设计流程 B端埋点的注意事项 在B端产品中,前端负责向用户呈现结果,后端负责存储计算 业务追踪 用户执行了哪些业务动作 行为追踪 用户在界面做了哪些事情 前后端分开后,我们就能更好地区分两种不同的追踪需求:业务追踪放在

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

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

    2024年02月08日
    浏览(34)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包