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

news2024/12/27 15:44:07
一、背景
埋点方案,前端涉及到哪些技术要点,本文做简单的梳理和总结。
二、指纹追踪技术:识别到用户及设备
浏览器:浏览器指纹_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.visibilityState
      if(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项目的介绍,好评。

过程记录:
记录一、刷新页面属于当前页面吗?
个人认为属于,因为没有离开当前页面,或者为了更好的使用当前页面,至少是心理上的。
刷新页面会影响页面停留时长的统计吗?应该影响吗?
我觉得不应该影响
为了避免影响,可以把相关的时间存储起来,比如放在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://www.coloradmin.cn/o/401550.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

利用Mysql存储过程造百万级数据

1.准备工作&#xff08;1&#xff09;由于是使用存储过程&#xff0c;mysql从5.0版开始支持存储过程&#xff0c;那么需要mysql的版本在5.0或者以上。如何查看mysql的版本&#xff0c;使用下面sql语句查看&#xff1a;&#xff08;2&#xff09;创建两张表&#xff0c;表结构一…

Android Crash和ANR监控

文章目录一、Crash1.1 概念1.2 类型二、ANR2.1 概念2.2 类型2.2.1 KeyDispatchTimeout&#xff08;常见&#xff09;2.2.2 BroadcastTimeout2.2.3 ServiceTimeout2.2.4 ContentProviderTimeout三、测试中如何关注3.1 Crash测试关注方法3.2 ANR测试关注方法四、如何记录与处理4.…

C++复习笔记--STL的string容器和vector容器

1--string容器string 本质上是一个类&#xff0c;其不同于指针 char*&#xff0c;string 类的内部封装了 char*&#xff0c;用于管理字符串&#xff0c;是一个 char* 型的容器&#xff1b;1-1--string构造函数string 的构造函数原型&#xff1a;string(); // 创建一个空的字符串…

媒体邀约的形式和步骤

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 做媒体服务很多年&#xff0c;今天就与大家分享下媒体邀约都有哪些形式&#xff1a; 1&#xff0c;电话邀约&#xff1a;通过电话与媒体记者进行沟通&#xff0c;邀请其参加活动或接受采…

CDC 长沙站丨云原生技术研讨会:数字兴链,云化未来!

一、活动信息&#xff1a;活动主题&#xff1a;CDC 长沙站丨云原生技术研讨会活动时间&#xff1a;2023 年 3 月 14 日下午 14&#xff1a;30-17&#xff1a;30活动地点&#xff1a;长沙市岳麓区-拓维信息总部 1 楼多功能厅活动参与方式&#xff1a;免门票参与&#xff0c;戳此…

船舶自动驾驶避撞规则

1无人船避碰阶段 如图1所示。 第一阶段&#xff1a;感知阶段。使用雷达、AIS、激光雷达和视觉传感器等感知传感器进行障碍物检测。利用感知到的信息&#xff0c;获得障碍物的运动信息。 第二阶段&#xff1a;决策阶段。利用障碍物的运动信息做出避免冲突的决策。在这一阶段&am…

数据结构排序比较

排序的概念及其运用 (1)排序的概念 排序:所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的操作。 稳定性:假定在待排序的记录序列中&#xff0c;存在多个具有相同的关键字的记录&#xff0c;若经过排序&am…

Spring-AOP工作流程

Spring-AOP工作流程 3&#xff0c;AOP工作流程 3.1 AOP工作流程 由于AOP是基于Spring容器管理的bean做的增强&#xff0c;所以整个工作过程需要从Spring加载bean说起: 流程1:Spring容器启动 容器启动就需要去加载bean,哪些类需要被加载呢?需要被增强的类&#xff0c;如:B…

C++ Qt自建网页浏览器

C Qt自建网页浏览器如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01;前言这篇博客针对<<C Qt自建网页浏览器>>编写代码&#xff0c;代码整洁&#xff0c;规则&#xff0c;易读。 学习与应用推荐首选。文…

手把手教你实现书上的队列,进来试试?

一.队列的基本概念队列的定义队列&#xff08;queue&#xff09;是只允许在一端进行插入操作&#xff0c;而在另一端进行删除操作的线性表。队列是一种先进先出&#xff08;First In First Out&#xff09;的线性表&#xff0c;简称FIFO。允许插入的一端称为队尾&#xff0c;允…

如何取消电脑开机密码?1分钟可学会,快速取消

​如果小伙伴觉得每次开机都需要输入密码很烦&#xff0c;那么小伙伴应该学会如何取消电脑开机密码。本篇文章&#xff0c;小编将以图文教学的方式&#xff0c;向小伙伴介绍如何在短短的1分钟内&#xff0c;就能够取消电脑开机密码&#xff0c;让小伙伴摆脱烦人的开机密码&…

Pytorch优化器Optimizer

优化器Optimizer 什么是优化器 pytorch的优化器&#xff1a;管理并更新模型中可学习参数的值&#xff0c;使得模型输出更接近真实标签 导数&#xff1a;函数在指定坐标轴上的变化率 方向导数&#xff1a;指定方向上的变化率&#xff08;二元及以上函数&#xff0c;偏导数&am…

windows安装docker-小白用【避坑】【伸手党福利】

目录实操开启 Hyper-V 和容器特性下载docker安装dockercmd中&#xff0c;使用命令测试是否成功报错解决办法&#xff1a;下载linux模拟器wsl&#xff1a;双击打开docker重新打开cmd&#xff0c;输入命令&#xff0c;成功显示sever和clinet实操 开启 Hyper-V 和容器特性 控制面…

项目进度管理:项目经理应该怎么做?

项目经理的职责是非常清晰的、界面分明的。项目经理经常忙碌的原因是&#xff0c;缺乏规划&#xff0c;觉得很多业务都跟自己相关&#xff0c;但不知道到底要做哪些工作&#xff0c;没有把多个角色分清楚。 1、目标。 项目目标是实施项目所要达到的期望结果&#xff0c;一个明…

基于嵌入式linux的OpenSSL源码移植(基于arm64)

SSL是Secure Sockets Layer&#xff08;安全套接层协议&#xff09;的缩写&#xff0c;可以在Internet上提供秘密性传输。Netscape公司在推出第一个Web浏览器的同时&#xff0c;提出了SSL协议标准。其目标是保证两个应用间通信的保密性和可靠性,可在服务器端和用户端同时实现支…

类和对象(一)

类和对象&#xff08;一&#xff09; C并不是纯面向对象语言 C是面向过程和面向对象语言的&#xff01; 面向过程和面向对象初步认识&#xff1a; C语言是面向过程的&#xff0c;关注的是过程&#xff0c;分析出求解问题的步骤&#xff0c;通过函数调用逐步解决问题。 C是基…

驱动程序开发:FTP服务器和OpenSSH的移植与搭建、以及一些笔记

目录一、FTP服务器移植与搭建1、在ubuntu下安装vsftpd2、在window下安装FileZilla3、移植vsftpd到开发板上4、Filezilla 连接测试5、注意点二、开发板 OpenSSH 移植与使用1、移植 zlib 库2、移植 openssl 库3、移植 openssh 库4、openssh 使用测试三、关于u-boot上的操作及根文…

数据表(二) - 数据表的制作方式

本篇来介绍下数据表的几种制作数据的方式。Excel是大部分数值策划选择用的填数工具&#xff0c;因为Excel是天生为数据处理而生&#xff0c;而Excel转为什么格式就需要选择了。最简单的就是直接将Excel里的数据复制黏贴到文本文件作为游戏数据。这种简单快捷的方式任何人都能做…

DatenLord前沿技术分享 No.20

达坦科技专注于打造新一代开源跨云存储平台DatenLord&#xff0c;致力于解决多云架构、多数据中心场景下异构存储、数据统一管理需求等问题&#xff0c;以满足不同行业客户对海量数据跨云、跨数据中心高性能访问的需求。喷泉码具有极高的纠错能力&#xff0c;且具有低延迟、地复…

CnOpenData·A股上市企业数字化转型指数数据

一、数据简介 企业数字化转型是近年来中国社会各界重点关注的领域&#xff0c;但基础数据的不完善在很大程度上制约了相关科学研究的开展。构建合理、科学的数字化转型指标体系有利于学者定量地研究企业数字化的相关问题&#xff0c;也有利于衡量企业的数字化水平。广东金融学院…