埋点
- 针对特定用户行为或事件进行捕获、处理和发送的相关技术及其实施过程
基于Ajax的埋点上报
1 | function buryingPointAjax(data) { |
缺点
- 埋点域名有可能不是当前域名,因此请求会存在跨域风险
基于img
的埋点上报
通过支持跨域的标签去实现数据上报功能
script
link
- script、link 进行埋点上报,需要挂载到页面上,但反复操作
dom
会造成性能开销,并且载入js/css
资源会阻塞页面渲染,影响用户体验
img
img
加载并不需要挂载到页面上,通过new Image,设置src
可以直接请求图片
1 | const img = new Image() |
img
的加载不会阻塞html
的解析,但img
加载后并不渲染,它需要等待render tree生成完后才和render tree 一起渲染出来- 通常埋点上报会使用
gif
图,合法的GIF只需要43个字节
基于Navigator.sendBeacon
的埋点上报
- 它是目前通用的埋点上报方案,该方法可用于通过HTTP POST将少量数据异步传输到Web服务器
navigator.sendBeacon(url,data)
url
:请求地址data
:数据类型
navigator.sendBeacon
如果成功进入浏览器的发送队列后,会返回true;如果受到队列总数、数据大小的限制后,会返回false。返回true后,只是表示进入了发送队列,浏览器会尽力保证发送成功,但是否成功了,不会再有任何返回值。navigator.sendBeacon
是异步的,不会影响当前页到下一个页面的跳转速度,且不受同域限制。这个方法还是异步发出请求,但是请求与当前页面脱离关联,作为浏览器的任务,因此可以保证会把数据发出去,不拖延卸载流程
常见埋点行为
点击触发埋点
1 | function clickButton(url,data) { |
页面停留时间上报埋点
1 | // 路由文件中,初始化一个startTime,当页面离开时,通过路由守卫计算停留时间 |
错误监听埋点
1 | // vue错误捕获 |
方法封装
1 | // ajax上报 |