vue项目进行前端埋点,记录页面菜单停留时间

67 篇文章 0 订阅

主要采用代码埋点,分为以下两点:

  • 命令式埋点
  • 声明式埋点

一、命令式埋点

命令式埋点,顾名思义,开发者需要手动在需要埋点的节点处进行埋点。如点击按钮或链接后的回调函数、页面ready时进行请求的发送。

// 页面加载时发送埋点请求
$(document).ready(function(){
   // ... 这里存在一些业务逻辑
   sendRequest(params);
});
// 按钮点击时发送埋点请求
$('button').click(function(){
   // ... 这里存在一些业务逻辑
   sendRequest(params);
});

可以很容易发现,这样的做法很有可能会将埋点代码侵入业务代码,这使整体业务代码变得繁琐,容易出错,且后续代码会愈加膨胀,难以维护。所以,我们需要让埋点的代码与具体的业务逻辑解耦,即 声明式埋点 ,从而提高埋点的效率和代码的可维护性。

二、声明式埋点

点击埋点:自定义指令实现统计用户在应用内的每一次点击事件,如新闻的浏览次数、文件下载的次数、推荐商品的命中次数等。

在项目入口文件 main.js 中配置我们的自定义指令

Vue.directive('log', {
  bind(el, binding) {
    el.addEventListener('click', () => {
       Axios.post  //发送请求
    }, false);
  }
});

组件中配置使用v-log指令,加上详情参数就可以完成用户轨迹记录。

// caption表示埋点的模块;paras表示用户的行为
<button v-log="{caption:'登录页', paras: '用户点击验证码发送'}">发送验证码</button>

页面埋点:统计用户进入或离开页面的各种维度信息,如页面浏览次数(PV)、浏览页面人数(UV)、页面停留时间、浏览器信息等。

使用 vue-router 的 beforeEach 或者 afterEach 钩子上报数据,具体使用哪个最好是根据业务逻辑来选择。

/**页面埋点方案*/
let startTime = Date.now();
let currentTime;
router.beforeEach((to, from, next) => {
  if (to) {
    // 第一步:页面跳转后记录一下当前的时间 currentTime
    currentTime = Date.now();
    // 第二步:计算 currentTime - startTime 的 差值
    const user = JSON.parse(localStorage.getItem("sysUser"));
    const log = {
      当前用户: user.userId,
      当前页路由: from.name,
      当前页菜单名: from.name,
      目标页: to.name,
      开始时间: startTime,
      结束时间: currentTime,
      // "停留时间(ms)": currentTime - startTime,
      "停留时间(s)": parseInt((currentTime - startTime) / 1000),
    };
    console.table(log, "log");
    // 第三步:每次都要初始化一下 startTime
    startTime = Date.now();
  }
  next();
});

 

  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值