数据指标上报方式
Opened this issue · 0 comments
funnycoderstar commented
埋点方案
- 全埋点
- 手动埋点(代码上报)
数据指标上报方式
前端埋点收集到的数据需要上报给服务端,目前较为常用的方案为三种。
1. 动态创建img标签,通过src发出请求
通过 img 标签
function sendByImg(src, data) {
var img = document.createElement("img");
img.src = `${src}?log=${data}`;
}
通过 Image 对象
function sendByImage(src) {
var img = new Image();
img.src = `${src}?log=${data}`;
}
优点:
- 支持跨域
- 上报数据不需要响应
- src请求数据量小,速度快,页面销毁时监控埋点会等上报请求发送完毕,再执行页面卸载
缺点
- 无法发送大量数据
- 页面销毁时有埋点监控会让页面关闭速度慢,影响用户体验
2. ajax/fetch
优点:
- 灵活设置请求头
- 发送大体量数据,满足特定场景需求
缺点: - 数据量大的请求占用带宽资源多,增加服务器压力。
- 页面销毁时的监控埋点大概率上报失败
3. navigator.sendBeacon
navigator.sendBeacon(url, data);
优点:
- 用来解决web页面在触发卸载销毁事件 unload期间会中断所有异步xhr请求的问题。会保证页面在已经关闭的情况下也发送请求
缺点:
- 只支持post,且数据量不会像正常xhr的post数据量那么大,由客户端决定
- 存在兼容问题
混合式埋点上报方案
- 轻量级数据使用 image src 属性进行上报
- 特定场景需要采集大量级的数据可以改用post请求的方式
- 需要监测用户关闭浏览器时上报数据,采用 navigator.sendBeacon,如果不支持,降级为 image src属性