vue实现页面停留时间统计

文章介绍了如何在前端开发中使用vue-router的路由守卫和unload事件来统计并优化页面停留时间的计算,减少了代码冗余,提高了开发效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

在实际业务中,埋点需求是前端开发中非常重要的数据指标获取的方式之一。今天,主要聊一下页面停留时间的统计。

简略版

每个页面独自实现相关统计,并上报数据。

export default {
	  data() {
		    return {
		      	startTime: 0,
		    }
	  },
	  created() {
	    	this.startTime = Date.now()
	  },
	  beforeRouteLeave(to, from, next) {
		    let stayTime = Date.now() - this.startTime
		    console.log(`停留时间:${stayTime}ms`)
		    next()
	  }
}

完整版

虽然每个页面自己统计可以实现需求。但是,由于每个页面计算逻辑等大体一致,所以会有大量的代码冗余。借助vue-router,我们可以封装一套相对完整的上报逻辑代码,提高开发效率。

window.pageViewStartTime = null;
router.beforeEach((to, from, next) => {
	  if (from.name && window.pageViewStartTime) {
		    const pageViewTime = new Date() - window.pageViewStartTime;
		    console.log(`Page view time for ${from.name}: ${pageViewTime}ms`);
	  }
	  window.pageViewStartTime = new Date();
	  next();
});
window.addEventListen('unload', () => {
	if (window.pageViewStartTime) {
		 	const pageViewTime = new Date() - window.pageViewStartTime;
		    console.log(`Page view time for ${from.name}: ${pageViewTime}ms`);
	}
})

结论

由于页面的前进、后退可以用vue-router的路由守卫来处理,页面刷新可以用unload事件来处理,这样就简洁地实现了页面停留时间的统计。

Vue3 和 UniApp 中,记录用户在微信小程序中的页面停留时间通常需要结合服务端和客户端两部分来实现,因为微信小程序本身并不提供直接的浏览器历史记录功能。 Vue3中,可以利用Vuex(状态管理库)存储当前页面的进入时间,并在页面卸载或路由改变时更新离开时间。然后,在适当的时候(如登录或登出操作),将数据发送到服务器。例如: 1. 使用Vuex存储状态: ```javascript import { createStore } from 'vuex'; const store = createStore({ state: { pageEnterTime: null, }, mutations: { SET_ENTER_TIME(state, time) { state.pageEnterTime = time; }, CLEAR_LEAVE_TIME(state) { state.pageEnterTime = null; }, }, }); ``` 2. 页面组件内处理进入和离开事件: ```html <template> <div v-if="pageEnterTime"> <!-- 页面内容 --> <button @click="handleLeave">离开页面</button> </div> </template> <script> export default { computed: { pageEnterTime() { return this.$store.state.pageEnterTime; }, }, methods: { handleEnter() { this.$store.commit('SET_ENTER_TIME', Date.now()); }, handleLeave() { // 更新离开时间并发送数据到服务器 const leaveTime = Date.now(); this.$store.commit('CLEAR_LEAVE_TIME'); // 通过axios或其他HTTP库发送到后端API axios.post('/api/timeRecord', { enterTime, leaveTime }); }, }, created() { this.handleEnter(); // 初始化进入时间 }, beforeDestroy() { this.handleLeave(); // 页面销毁时发送离开时间 }, }; </script> ``` UniApp中,可以类似地利用云函数或本地缓存存储时间和在生命周期钩子中发送数据。关键在于在`onLaunch`、`onShow`和`onHide`等生命周期回调中更新用户活动状态。 记得遵守微信小程序的数据安全策略,确保用户隐私合规。同时,由于微信小程序有自己的运行机制,可能会有延迟,实时精确计时可能不太准确。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值