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

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

一、背景

埋点方案,前端涉及到哪些技术要点,本文做简单的梳理和总结。

二、指纹追踪技术:识别到用户及设备

浏览器:浏览器指纹_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项目的介绍,好评。

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 是否上报?个人认为上报

记录二、前端、后端配合做埋点

前端埋点系统 - 知乎

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

相关文章
|
3月前
|
运维 前端开发 JavaScript
前端埋点校验工具:数据驱动的最后一道防线
数据埋点是企业决策的关键基础,但常面临覆盖率低、数据不准和故障难排查三大难题。本文深入剖析了这些问题的成因与影响,并提出“三维校验矩阵”解决方案:提升覆盖率至99.8%、降低错误率至0.3%、提速故障定位5倍。同时对比Split.io、Tealium、Sentry、板栗看板等工具优劣,为企业选型提供参考。迈向高质量数据治理,从精准埋点开始。
|
6月前
|
前端开发 Java 物联网
智慧班牌源码,采用Java + Spring Boot后端框架,搭配Vue2前端技术,支持SaaS云部署
智慧班牌系统是一款基于信息化与物联网技术的校园管理工具,集成电子屏显示、人脸识别及数据交互功能,实现班级信息展示、智能考勤与家校互通。系统采用Java + Spring Boot后端框架,搭配Vue2前端技术,支持SaaS云部署与私有化定制。核心功能涵盖信息发布、考勤管理、教务处理及数据分析,助力校园文化建设与教学优化。其综合性和可扩展性有效打破数据孤岛,提升交互体验并降低管理成本,适用于日常教学、考试管理和应急场景,为智慧校园建设提供全面解决方案。
414 70
|
11月前
|
前端开发 JavaScript 测试技术
前端测试技术中,如何提高集成测试的效率?
前端测试技术中,如何提高集成测试的效率?
|
6月前
|
监控 前端开发 小程序
陪练,代练,护航,代打小程序源码/前端UNIAPP-VUE2.0开发 后端Thinkphp6管理/具备家政服务的综合型平台
这款APP通过技术创新,将代练、家政、娱乐社交等场景融合,打造“全能型生活服务生态圈”。以代练为切入点,提供模块化代码支持快速搭建平台,结合智能匹配与技能审核机制,拓展家政服务和商业管理功能。技术架构具备高安全性和扩展性,支持多业务复用,如押金冻结、录屏监控等功能跨领域应用。商业模式多元,包括交易抽成、增值服务及广告联名,同时设计跨领域积分体系提升用户粘性,实现生态共生与B端赋能。
553 12
|
10月前
|
人工智能 自然语言处理 前端开发
从0开始打造一款APP:前端+搭建本机服务,定制暖冬卫衣先到先得
通义灵码携手科技博主@玺哥超carry 打造全网第一个完整的、面向普通人的自然语言编程教程。完全使用 AI,再配合简单易懂的方法,只要你会打字,就能真正做出一个完整的应用。
11180 29
|
11月前
|
前端开发 JavaScript API
惊呆了!这些前端技术竟然能让你的网站实现无缝滚动效果!
【10月更文挑战第30天】本文介绍了几种实现网页无缝滚动的技术,包括CSS3的`scroll-snap`属性、JavaScript的Intersection Observer API以及现代前端框架如React和Vue的动画库。通过示例代码展示了如何使用这些技术,帮助开发者轻松实现流畅的滚动效果,提升用户体验。
927 29
|
11月前
|
前端开发 JavaScript 搜索推荐
HTML与CSS在Web组件化中的核心作用及前端技术趋势
本文探讨了HTML与CSS在Web组件化中的核心作用及前端技术趋势。从结构定义、语义化到样式封装与布局控制,两者不仅提升了代码复用率和可维护性,还通过响应式设计、动态样式等技术增强了用户体验。面对兼容性、代码复杂度等挑战,文章提出了相应的解决策略,强调了持续创新的重要性,旨在构建高效、灵活的Web应用。
223 6
|
11月前
|
前端开发 JavaScript 搜索推荐
前端懒加载:提升页面性能的关键技术
前端懒加载是一种优化网页加载速度的技术,通过延迟加载非首屏内容,减少初始加载时间,提高用户访问体验和页面性能。
|
11月前
|
缓存 JavaScript 前端开发
JavaScript 与 DOM 交互的基础及进阶技巧,涵盖 DOM 获取、修改、创建、删除元素的方法,事件处理,性能优化及与其他前端技术的结合,助你构建动态交互的网页应用
本文深入讲解了 JavaScript 与 DOM 交互的基础及进阶技巧,涵盖 DOM 获取、修改、创建、删除元素的方法,事件处理,性能优化及与其他前端技术的结合,助你构建动态交互的网页应用。
388 5
|
11月前
|
移动开发 前端开发 JavaScript
惊!这些前端技术竟然能让你的网站在移动端大放异彩!
随着互联网技术的发展,移动设备成为主要的上网工具。本文介绍了几种关键的前端技术,包括响应式设计、图片优化、字体选择、HTML5和CSS3的应用、性能优化及手势操作设计,帮助开发者提升网站在移动端的显示效果和用户体验。示例代码展示了如何实现简单的双向绑定功能。
185 3