Vue项目埋点方案

原文地址:Vue项目埋点方案 - BIGTREE

前端埋点主要分为以下三类:
代码埋点:在需要埋点的地方添加埋点逻辑代码或自定义属性实现。
可视化埋点:使用可视化的工具进行埋点,即无痕埋点。前端页面加载时根据埋点配置,自动调用接口上传埋点数据。
无埋点:前端自动采集全部事件并上报埋点数据。

可视化埋点和无埋点方案前期投入较大,故在此考虑使用代码埋点的方案。

代码埋点又分为两类:
命令式埋点:在需要埋点的地方添加埋点逻辑代码。缺点:工作量大,且会侵入业务逻辑代码。
声明式埋点:在需要埋点的地方新增自定义属性,通过识别自定义属性绑定事件,采集并上传埋点数据;

故最终埋点方案:使用Vue自定义命令实现声明式代码埋点

以下为Vue项目具体埋点步骤:

第一步:新增track.js,通过自定义属性track绑定点击事件

import Vue from 'vue'
import { eventLog } from '@/api/bpl/event'

// 埋点指令
let track = Vue.directive('track', {
    bind: (el, binding, vnode) => {
        el.addEventListener('click', () => {
            const data = binding.value;

            // requ
### Vue3 中实现埋点的方法 #### 使用 Vuex 和自定义 Hook 实现全局埋点 为了在 Vue 3 项目中实现可靠的埋点功能,可以采用 Vuex 来集中管理应用程序的状态,并创建自定义 Hook 处理具体的埋点逻辑。这种方法不仅能够保持代码整洁,还能方便地跟踪用户的交互行为。 首先,在 `store/index.js` 文件内配置好 Vuex store: ```javascript import { createStore } from 'vuex' export default createStore({ state() { return { events: [] } }, mutations: { logEvent(state, event) { state.events.push(event); // 可在此处发送事件到服务器或其他分析平台 } }, actions: { track({ commit }, payload) { const timestamp = new Date().toISOString(); commit('logEvent', { ...payload, timestamp }); } } }) ``` 接着,构建一个可重用的 Hook 函数用于捕获组件内的特定动作并触发相应日志记录操作[^2]。 ```typescript // hooks/useTracking.ts import { useStore } from 'vuex'; import { onMounted, ref } from 'vue'; function useTracking(eventName) { const store = useStore(); function handleTrack(data) { store.dispatch('track', { name: eventName, data }); } return { handleTrack }; } export default useTracking; ``` 最后,在任何需要的地方引入此 Hook 并调用它来执行实际的日志记录工作。 ```html <template> <div @click="handleClick">点击这里</div> </template> <script setup lang="ts"> import useTracking from '@/hooks/useTracking'; const { handleTrack } = useTracking('button-click'); function handleClick() { handleTrack({ message: '用户点击了按钮' }); } </script> ``` #### 利用 Beacon API 提升数据上报可靠性 当涉及到页面卸载期间的数据传输时,推荐使用 Beacon API 替代传统的 XMLHttpRequest 或 Fetch 请求方式。这是因为 Beacon 能够确保即使浏览器窗口关闭或导航至其他页面之后仍然能成功提交重要信息给服务器端处理[^1]。 可以在应用退出前监听 `beforeunload` 事件并向服务端异步发送未完成的任务列表作为最终报告的一部分。 ```javascript window.addEventListener('beforeunload', async () => { navigator.sendBeacon('/api/endpoint', JSON.stringify(store.state.events)); }); ``` #### 集成第三方统计工具如百度统计 对于希望快速集成成熟解决方案而不愿自行搭建基础设施的情况,则可以选择接入像百度统计这样的外部服务商所提供的 SDK 。这通常只需要几行简单的命令就能完成初始化设置过程[^3]。 安装依赖包: ```bash npm install --save vue-baidu-analytics ``` 按照官方文档说明修改入口文件(main.js),注册插件实例并将必要的参数传递进去以便正常使用其全部特性。 ```javascript import VueBaiduAnalytics from 'vue-baidu-analytics' import App from './App.vue' Vue.use(VueBaiduAnalytics, { hm: ['_init_', '5f7d8e9a'] }) new Vue({ render: h => h(App), }).$mount('#app') ``` #### 自定义指令实现局部元素级埋点 除了上述提到的技术手段外,还可以借助于 Vue 的自定义指令机制针对单个 DOM 元素实施更加精细粒度上的监测活动。这种方式特别适合用来捕捉诸如按钮点击次数之类的简单场景下的用户互动情况[^4]。 定义一个新的全局指令供后续复用: ```javascript // main.js or directive plugin file import { createApp } from 'vue'; createApp(App).directive('log', { mounted(el, binding) { el.addEventListener('click', () => { console.log(`Element ID:${el.id}, Event Data:` + JSON.stringify(binding.value)) }) } }) ``` 随后只需按需附加该属性即可轻松激活对应的功能模块而无需额外编写业务无关的样板代码片段。 ```html <button v-log="{ page:'home', action:'submit-form', elementId:'submitButton'}" id="myButton">Submit Form</button> ```
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值