【每日一题】页面埋点怎么实现?

前端印记

共 3721字,需浏览 8分钟

 ·

2021-09-06 18:35

人生苦短,总需要一点仪式感。比如学前端~

现有的埋点类型

  1. 手动代码埋点: 在需要采集数据的地方调用埋点的方法。在任意地点任意场景进行数据采集
  2. 可视化埋点: 元素都带有唯一标识。通过埋点配置后台,将元素与要采集事件关联起来,可以自动生成埋点代码嵌入到页面中。
  3. 无埋点: 前端自动采集全部事件,上报埋点数据,由后端来过滤和计算出有用的数据,

基本实现的方案

约定通用的埋点采集接口规范:
header(标识X-Device-Id, X-Source-Url,X-Current-Url,X-User-Id等信息), body(标识PageSessionID, Event, PageTitle,CurrentTime, ExtraInfo);

指定调用采集脚本的方式:
单页面应用 => 对history路径的变化保持监听,路径变化时触发埋点收集;
页面加载离开绑定对应的onload,unload事件;
页面元素上绑定相关的交互事件(click, event等)。

伪代码

var collect = {
    deviceUrl:'',
    eventUrl:'',
    isuploadUrl:'',
    parmas:{},
    device:{}
};

//获取埋点配置
collect.setParames = function(){}

//更新访问路径及页面信息
collect.updatePageInfo = function(){}

//获取事件参数
collect.getParames = function(){}

//获取设备信息
collect.getDevice = function(){}

//事件采集
collect.send = function(){}

//设备采集
collect.sendDevice = function(){}

//判断是否采集,埋点采集的开关
collect.isupload = function(){

/*
1. 判断是否采集,不采集就注销事件监听(项目中区分游客身份和用户身份的采集情况,这个方法会被判断两次)
2. 采集则判断是否已经采集过
    a.已经采集过不做任何操作
    b.没有采集过添加事件监听
3. 判断是 混合应用还是纯 web 应用
    a.如果是web 应用,调用 collect.setIframe 设置 iframe
    b.如果是混合应用 将开始加载和加载完成事件传输给 app
*/


}

//点击事件处理函数
collect.clickHandler = function(){}

//离开页面的事件处理函数
collect.beforeUnloadHandler = function(){}

//页面回退事件处理函数
collect.onPopStateHandler = function(){}

//系统事件初始化,注册离开事件,浏览器后退事件
collect.event = function(){}

//获取记录开始加载数据信息
collect.getBeforeload = function(){}

//存储加载完成,获取设备类型,记录加载完成信息
collect.onload = function(){
/*
    1. 判断cookie是否有存设备类型信息,有表示混合应用
    2. 采集加载完成时间等信息
    3. 调用 collect.isupload 判断是否进行采集
*/

}

//web 应用,通过嵌入 iframe 进行跨域 cookie 通讯,设置设备id
collect.setIframe = function(){}

//app 与 h5 混合应用,直接将数信息发给 app,判断设备类型做原生方法适配器
collect.saveEvent = function(){}

//采集自定义事件类型
collect.dispatch = function(){}

//将参数 userId 存入sessionStorage
collect.storeUserId = function(){}

//采集H5信息,如果是混合应用,将采集到的信息发送给 app 端
collect.saveEventInfo = function(){}

//页面初始化调用方法
collect.init = function(){
/*
    1. 获取开始加载的采集信息
    2. 获取 SDK 配置信息,设备信息
    3. 改写 history 两个方法,单页面应用页面跳转前调用我们自己的方法
    4. 页面加载完成,调用 collect.onload 方法
*/


}


collect.init(); // 初始化

//暴露给业务方调用的方法
return {
    dispatch:collect.dispatch,
    storeUserId:collect.storeUserId,
}

END
愿你历尽千帆,归来仍是少年。


让我们一起携手同走前端路!

关注公众号回复【加群】即可

● 工作中常见页面布局的n种实现方法

● 三栏响应式布局(左右固宽中间自适应)的5种方法

● 两栏自适应布局的n种实现方法汇总

● 工作中常见的两栏布局案例及分析

● 垂直居中布局的一百种实现方式

● 常用九宫格布局的几大方法汇总

● 为什么操作DOM会影响WEB应用的性能?

● 移动端滚动穿透的6种解决方案

● Vue + TypeScript 踩坑总结




浏览 25
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报