埋点tracker:前端埋点服务-技术要点梳理

article/2025/10/8 8:35:56
一、背景
埋点方案,前端涉及到哪些技术要点,本文做简单的梳理和总结。
二、指纹追踪技术:识别到用户及设备
浏览器:浏览器指纹_snow@li的博客-CSDN博客
三、用户设备信息(navigator)
navigator.userAgent

四、页面独立标识(子系统+导航菜单+业务菜单)
类似面包屑的功能实现用户操作深度的记录,子系统+导航菜单+业务菜单
五、统计事件
事件描述
click点击事件,打开页面
search搜索事件
download下载事件
save修改、保存
view查看事件、查看数据详情
refund退款事件
create新增事件
login登录事件
logout退出事件
六、停留时长
技术栈:nuxt2
路由切换时,页面关闭时,都可以记录页面停留的时间。
plugins/router.js
export default ({ app, store }) => {let startTime = Date.now() // 刷新页面,记录时间戳let endTime = ''app.router.afterEach((to, from) => { // 后置守卫endTime = Date.now() // 准备切换页面,记录时间戳if(from.fullPath !== "/"){ // from.fullPath 页面停留时长console.log('time:', (endTime - startTime) / 1000)app.store.dispatch('submitTracker');}routerHandle(to.path, store, true, to);startTime = Date.now() // 页面加载完成,记录时间戳});window.addEventListener('beforeunload', e => { // 页面刷新 或关闭 都会执行这个事件// 打开后会弹窗阻止继续执行// e.preventDefault() // e.returnValue = ''app.store.dispatch('submitTracker');});
};
nuxt.config.js
plugins: [{src: '../m-front-common/pc/plugins/viewer'},
]

七、判断页面是刷新还是关闭

function () {let beforeUnloadTime = 0, unloadTime = 0// 窗口关闭或刷新时候的操作window.addEventListener('beforeunload', (event) => {beforeUnloadTime = new Date().getTime()});window.addEventListener('unload', (event) => {unloadTime = new Date().getTime()console.log(unloadTime - beforeUnloadTime )// 刷新时onbeforeunload与onunload的时间差一般都远大于5ms,从而区分关闭还是刷新if (unloadTime - beforeUnloadTime <= 5) {console.log('关闭')} else {console.log('刷新')}})
}

 八、visibilitychange事件,浏览器tab状态

document.addEventListener('visibilitychange',function(e){console.log(document.visibilityState);let state = document.visibilityStateif(state == 'hidden'){console.log(document.visibilityState,'用户离开了');}if(state == 'visible'){console.log(document.visibilityState,'用户回来了');}
});

九、接口请求的统计

统计接口调用次数

接口是在哪个 子系统+导航菜单+业务菜单+接口 调用的(上下文)

每调用一个后端接口,伴随着调用一个“上报接口”,上报数据

if (!apiUrl.includes('config/manage/byKeys')) { // 请求成功后,判断不是业务接口,是上报接口,调用上报store.dispatch('submitTracker');
}
return Promise.resolve(response)// 经过测试,接口调用成功
// 在axios封装中的context中可以获取到store、axios等信息
// const { $axios, store: $store } = context
十、自定义指令实现埋点
如何通过Vue自定义指令实现前端埋点详析 / 张生荣
十一、navigator.sendBeacon(页面关闭也会完成请求)
浏览器引入的sendBeacon方法,sendBeacon发出的是异步请求,但是请求是作为浏览器任务执行的,与当前页面是脱钩的。因此该方法不会阻塞页面卸载流程和延迟后面页面的加载。
navigator.sendBeacon(url, data);

XHR方法需要使用AJAX 通信改成同步发送,即只有发送完成,页面才能卸载。
navigator.sendBeacon 页面关闭也会完成请求

vue 监听网页关闭/浏览器关闭事件_vue页面关闭事件_Never Know 1 的博客-CSDN博客
十二、第三方开源工具 Matomo
vue-matomo - npm
好文-vue.js - Matomo 从了解到落地——页面流量统计与分析最佳实践 - 个人文章 - SegmentFault 思否
Matomo - Arch Linux 中文维基
matomo前端埋点 - 知乎
Matomo 中文 - 开源网络&移动 Analytics 统计分析软件
piwik现已改名为Matomo,这是一套国外著名的开源网站统计系统,类似于百度统计、友盟统计、Google Analytics等系统。可以分析流量、访客数、PV、UV等信息。
在开发面向内部使用的「内容管理平台」的过程中,我们不时会收到一些页面问题的反馈,但在本地调试的过程中,有大量无法在本地重现的问题,这些问题的出现跟用户的访问设备、网络环境、访问路径可能存在关联。为了方便快捷地去定位这些问题,我们试图为所有页面点击操作都加上打点记录,但在实际操作中,由于业务变更频繁,开发框架的限制,展示打点数据较为复杂等因素,通过打点排查问题的实际效果并不理想,因此我们希望引入完整的流量统计和用户行为分析来定位问题。
Matomo 的主要组成追踪器和 Matomo 服务端,追踪器基于 JS 实现,需要在网页引入,用于上报数据。
部署及使用:

1、部署私有化 Matomo 服务。

其中部署私有化服务只需要下载 Matomo 的程序并上传到服务端,然后打开访问地址就可以使用引导程序部署服务,包括检测服务器环境是否符合要求,填写数据库信息,创建管理账号等,具体参考官方文档。

2、在需要流量统计ide页面上引入追踪器。

vue-matomo - npm
npm网站有针对nuxt项目的介绍,好评。

nuxt2项目集成Matomo

plugins/vue-matomo.js

import Vue from 'vue'
import VueMatomo from 'vue-matomo'
export default ({ app }) => {Vue.use(VueMatomo, {router: app.router,host: 'https://abc.com/', // 自己网站siteId: '1' // id})
}

 nuxt.config.js

plugins: [{ src: './plugins/vue-matomo.js', ssr: false }
]

 查看数据

看到访问的数据,成功。

过程记录:
记录一、刷新页面属于当前页面吗?
个人认为属于,因为没有离开当前页面,或者为了更好的使用当前页面,至少是心理上的。
刷新页面会影响页面停留时长的统计吗?应该影响吗?
我觉得不应该影响
为了避免影响,可以把相关的时间存储起来,比如放在cookie,,对于单页面应用来说应该是可以的,,多页面应用需要区分,,
页面停留时间如果很短,比如小于1s 是否上报?个人认为上报
记录二、前端、后端配合做埋点
前端埋点系统 - 知乎

记录三、用户访问轨迹,用户画像

待补充

参考链接:
vue 监听网页关闭/浏览器关闭事件_vue页面关闭事件_Never Know 1 的博客-CSDN博客

vue 监听浏览器网页关闭和网页刷新事件_vue页面刷新事件_衫裤泡露的博客-CSDN博客
埋点、无埋点、全埋点大扫盲 - eyuang的个人空间 - OSCHINA - 中文开源技术交流社区
通过自定义 Vue 指令实现前端曝光埋点-蒲公英云
基于Vue3实现前端埋点上报插件并打包发布到npm的详细过程_vue.js_脚本之家
https://www.cnblogs.com/onesea/p/13600807.html
https://www.cnblogs.com/hrrtop/p/15100089.html
前端埋点系统 - 知乎
记一次前端时间埋点基于vue版本的_vue前端埋点_低调的小犬_Hansen的博客-CSDN博客
canvas指纹追踪Vue3 + vite + Ts + pinia + 实战 + 源码 +全栈_哔哩哔哩_bilibili
https://xiaoman.blog.csdn.net/article/details/125958100

http://chatgpt.dhexx.cn/article/CS1JZi7g.shtml

相关文章

前端 埋点

App.vue是vue页面资源的首加载项&#xff0c;是主组件&#xff0c;页面入口文件。所有页面都是在App.vue下进行也换的&#xff0c;APP.vue 负责构建定义及页面组件归集 需求 1.打开页面的时候&#xff0c;记录当前页面 2.切换页面的时候&#xff0c;记录在当前页面的停留时间…

前端埋点实现方案

前言 领导今天又来活了&#x1f623;&#xff0c;要记录每个页面的停留时间&#xff0c;以及页面的操作&#xff0c;是由哪个页面跳转过来的&#xff0c;给每个页面生成GUID上报给服务端&#xff0c;并且需要携带设备型号和设备唯一标识&#x1f644; 名称解释 UV&#xff0…

前端组件化埋点方案与实现

背景 埋点&#xff0c;是收集产品的数据的一种方式&#xff0c;其目的是上报相关行为数据&#xff08;PV/UV/时长/曝光/点击等&#xff09;&#xff0c;由相关人员以此分析用户的使用习惯&#xff0c;助力产品不断迭代和优化。对于开发来说&#xff0c;通常不仅仅需要完成基础…

三分钟,教你3种前端埋点方式!

作者&#xff1a;彩虹修狗 https://juejin.cn/post/7224132741997281338 前言 只有了解用户&#xff0c;我们才能服务好用户&#xff0c;而最接近用户的我们&#xff0c;自然要承担起更多的责任。 那么在一个企业中&#xff0c;我们要如何去了解用户呢&#xff1f;最直接有效的…

前端数据埋点

数据埋点&#xff0c;是一种常用的数据采集方法。埋点是数据的来源&#xff0c;采集的数据可以帮助业务人员分析网站或者App的使用情况、用户行为习惯等&#xff0c;是后续建立用户画像、用户行为路径等数据产品的基础。 前端的埋点方式主要分为代码埋点、可视化埋点、无埋点三…

前端埋点实现

您好&#xff0c;如果喜欢我的文章&#xff0c;可以关注我的公众号「量子前端」&#xff0c;将不定期关注推送前端好文~ 前端埋点实践 介绍1. 实现自定义hook&#xff0c;监测组件2. 收集数据3.前端错误捕捉4. 发送后端保存数据5.收集数据展示总结 介绍 这段时间博主一直在投入…

前端埋点实现及原理分析

正如在宏观介绍的博客中写到的&#xff0c;做用户行为分析的方式有“前端埋点”和“后端埋点”的区分&#xff0c;真好今天敲了一个坤哥整理的“前端埋点”的程序&#xff0c;理解了之后结合demo来简单讲解“前端埋点”如何做。 前端埋点原理图&#xff1a; 如上所示&#xff…

FReLU

论文&#xff1a;https://arxiv.org/pdf/2007.11824.pdf 代码&#xff1a;https://github.com/megvii-model/FunnelAct 概述 卷积神经网络&#xff08;CNN&#xff09;在许多视觉识别任务&#xff08;例如图像分类&#xff0c;目标检测和语义分割&#xff09;中均达到了最先进…

LFR benchmark在windows操作系统下形成网络详细步骤

研究社交网络的人应该都知道LFR benchmark network吧。但是我从网上找到很多关于LFR的压缩包&#xff0c;里面包含很多.cpp文件&#xff0c;在vs下建工程&#xff0c;把这些文件放进去却怎么也跑不通&#xff0c;真的是很恼火。 今天&#xff0c;终于看到一篇博客&#xff0c;…

神经网络-LFR model

CLDNN[1] 不同的网络结构有不同的优势 CNN擅长减少频率偏移LSTM擅长对时序信号进行建模DNN可以对特征做更高阶的抽象&#xff0c;更容易进行分类 CLDNN依次将CNN/LSTM/DNN进行串联组合成一个新的网络&#xff0c;相当于依次进行频域变化/时域关联/特征抽象&#xff0c;相比于…

CRLF和LF区别

目录&#xff1a; 文章目录 1、什么是CRLF和LF2、为什么要探究CRLF和LF3、三种方式处理的不同4、在Git中如何转换&#xff1f;参考文献 1、什么是CRLF和LF CRLF 是carriagereturnline feed的缩写。中文意思是回车换行。 LF是line feed的缩写&#xff0c;中文意思是换行。 2、…

LFR benchmark 操作步骤

先奉上资源 链接&#xff1a;https://pan.baidu.com/s/1Mm_UwUAhM0ofKXcFbti0YA 提取码&#xff1a;hvp8 复制这段内容后打开百度网盘手机App&#xff0c;操作更方便哦运行操作 在解压后的文件下找到 /benchmark/Debug 文件夹&#xff0c; 在该文件下运行命令行程序&#x…

西克推出LBR/LFR长距离非接触物位/液位传感器

西克推出LBR/LFR长距离非接触物位/液位传感器 在日常的生产过程中&#xff0c;我们可能会遇到一些严苛的工作环境&#xff0c;例如上百米高的筒仓&#xff0c;诸多粉尘的罐内环境&#xff0c;亦或是充满蒸汽或附着物的生产环境&#xff1b;对料位的监控显得更加重要和困难。传…

CRLF和LF

目录&#xff1a; 什么是CRLF和LF为什么要探究CRLF和LF三种方式处理的不同更多参考文献 &#x1f441; 关注微信公众号&#xff1a;非典型理科男 回复&#xff1a;架构设计 获取 架构设计经典著作 1、什么是CRLF和LF CRLF 是carriagereturnline feed的缩写。中文意思是回车换…

使用Arduino Uno构建一个巡线机器人

使用Arduino Uno构建一个巡线机器人 原文 MX 巡线机器人&#xff08;LFR: line follower robot&#xff09;是一种简单的自主引导机器人&#xff0c;它遵循在地面上绘制的线来检测白色表面上的暗线或黑暗表面上的白线。在本教程中&#xff0c;使用 Arduino Uno 和一些易于访问…

网络科学—Windows下生成LFR人工网络数据集的步骤

目录 1 引言 2 步骤 2.1 下载LFR程序包 2.2 解压LFR程序包 2.3 进入cmd程序 2.4 生成LFR网络 1 引言 很多做网络科学研究的学者研究生等都需要经常用到人工网络的数据&#xff0c;最为常用的就是LFR人工网络&#xff0c;下面详细描述了LFR网络的生成方式 2 步骤 2.1 下…

查看gcc编译器版本

我们在windows下DS5中编译时使用GCC交叉编译器&#xff0c;但是在ubuntu时也需要使用GCC编译器&#xff0c;这时最好时保持版本一致&#xff0c;所以就需要查看windows下版本&#xff0c;如下图&#xff0c;在按装的文件夹中找到对应得文件即可。 转载于:https://www.cnblogs.c…

linux下gcc版本切换

今天在linux环境下编译c文件的时候发现库函数居然找不到路径&#xff0c;查了好久都没有找到是什么问题&#xff0c;最后想到的解决办法&#xff1a;把gcc版本切回到linux自带版本 1.查看linux下已安装gcc版本 ls /usr/bin/gcc* 结果如下&#xff1a; 2.手动设置候选版本优先…

linux中gcc版本升级

环境 Linux version 3.10.0-1160.el7.x86_64 (mockbuildkbuilder.bsys.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) ) #1 SMP Mon Oct 19 16:18:59 UTC 2020 目前gcc版本4.8.5 正文 所需资源可以在gnu安装包下载_开源镜像站-阿里云下载 包括&#x…