前端层面----监控与埋点

news2024/11/14 5:38:55

前言:

站在产品的视角,经常会问如下几个问题:

  1. 产品有没有用户使用

  2. 用户用得怎么样

  3. 系统会不会经常出现异常

  4. 如何更好地满足用户需求服务用户

当站在技术视角时,经常会问如下几个问题:

  1. 系统出现异常的频率如何

  2. 异常出现后如何快速进行定位追踪

  3. 如何分析解决问题

而当站在老板的视角时,问题可能又会变为:

  1. 我的存量用户多少,未来还有多少潜力

  2. 多少用户在系统内进行了消费

当在回答了上述问题之后,埋点&监控便跃然纸上。因为要回答以上问题,只有通过对系统进行数据分析的方式才能弄清楚。

其实无论是埋点亦或是监控,二者并不是独立存在,而是相互依存的关系。
下图是摘自网上的,感觉挺不错的,如下:
在这里插入图片描述

那么实现它有哪些意义呢?

前端监控埋点的定义与意义

定义:

埋点,即数据埋点,是数据采集领域(尤其是用户行为数据采集领域)的术语,指的是针对特定用户行为或事件进行捕获、处理和发送的相关技术及其实施过程。

意义:

  1. 数据采集:通过埋点,可以收集到用户在应用中的所有行为数据,如页面浏览、按钮点击、表单提交等。
  2. 数据分析:采集的数据有助于分析网站或App的使用情况、用户行为习惯等,为后续建立用户画像、用户行为路径等数据产品提供基础。
  3. 改进决策:通过对埋点数据的分析,企业可以了解用户的真实需求和行为习惯,从而做出更符合市场和用户需求的决策。
  4. 优化运营:了解用户的兴趣和行为后,企业可以优化运营策略,提高运营效率和收益。
  5. 预测趋势:通过对数据的分析,企业可以预测市场和用户的未来趋势,提前做好准备,把握市场机遇。

那么又如何实现呢?

以下提供js实现方式,目前也有现成的组件库来实现,例如 Vue 插件:可以集成如 Sentry 或 LogRocket 等前端监控工具。

1. 前端监控

1.1 捕获 JavaScript 错误

可以在 Vue 应用中使用 errorCaptured 和全局 window.onerror 来捕获和处理 JavaScript 错误。

1.1.1 全局错误捕获

在 Vue 组件的根实例中使用全局错误处理:

javascript
// main.js
Vue.config.errorHandler = function (err, vm, info) {
  // 处理错误,例如发送到服务器
  fetch('https://your-logging-endpoint.com/errors', {
    method: 'POST',`在这里插入代码片`
    body: JSON.stringify({
      message: err.message,
      stack: err.stack,
      info
    }),
    headers: { 'Content-Type': 'application/json' }
  });

  // 也可以在这里执行其他的错误处理逻辑
  console.error(err);
};
1.1.2 组件级错误捕获

在 Vue 组件中使用 errorCaptured 钩子捕获错误:

javascript
export default {
  errorCaptured(err, vm, info) {
    // 处理错误,例如发送到服务器
    fetch('https://your-logging-endpoint.com/errors', {
      method: 'POST',
      body: JSON.stringify({
        message: err.message,
        stack: err.stack,
        info
      }),
      headers: { 'Content-Type': 'application/json' }
    });

    // 继续向上传递错误
    return false;
  }
};
1.2 捕获未处理的 Promise 错误

捕获全局未处理的 Promise 拒绝错误:

javascript
window.addEventListener('unhandledrejection', function (event) {
  fetch('https://your-logging-endpoint.com/promises', {
    method: 'POST',
    body: JSON.stringify({
      reason: event.reason
    }),
    headers: { 'Content-Type': 'application/json' }
  });

  // 防止控制台显示默认错误
  event.preventDefault();
});
1.3 用户行为监控

可以在 Vue 组件中添加事件监听器来记录用户行为。例如,记录用户的点击事件:

javascript
export default {
  mounted() {
    this.addEventListeners();
  },
  methods: {
    addEventListeners() {
      document.addEventListener('click', this.handleUserAction);
    },
    handleUserAction(event) {
      fetch('https://your-logging-endpoint.com/user-actions', {
        method: 'POST',
        body: JSON.stringify({ type: 'click', element: event.target.tagName }),
        headers: { 'Content-Type': 'application/json' }
      });
    }
  },
  beforeDestroy() {
    document.removeEventListener('click', this.handleUserAction);
  }
};

2. 埋点实现

埋点通常用于跟踪用户与应用的交互行为,帮助分析用户行为和产品性能。可以在 Vue 组件中实现埋点,例如,跟踪用户点击、表单提交等事件。

2.1 组件级埋点

在 Vue 组件中,可以在事件处理函数中添加埋点逻辑:

javascript
export default {
  methods: {
    trackClick() {
      // 记录点击事件
      fetch('https://your-tracking-endpoint.com/track', {
        method: 'POST',
        body: JSON.stringify({
          event: 'button_click',
          timestamp: new Date().toISOString()
        }),
        headers: { 'Content-Type': 'application/json' }
      });
    }
  }
};
2.2 全局事件总线

使用 Vue 的全局事件总线来统一管理事件埋点:

javascript
// event-bus.js
import Vue from 'vue';
export const EventBus = new Vue();

// main.js
import { EventBus } from './event-bus';

EventBus.$on('user-action', (data) => {
  fetch('https://your-tracking-endpoint.com/track', {
    method: 'POST',
    body: JSON.stringify(data),
    headers: { 'Content-Type': 'application/json' }
  });
});

// 使用事件总线触发埋点
export default {
  methods: {
    triggerAction() {
      EventBus.$emit('user-action', {
        event: 'button_click',
        timestamp: new Date().toISOString()
      });
    }
  }
};

总结:
前端监控:通过全局和组件级错误捕获,处理未处理的 Promise 错误,记录用户行为。
埋点实现:在组件中直接记录用户交互事件,或通过全局事件总线统一管理和发送埋点数据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2138487.html

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

相关文章

MyBatis中多对一关系的三种处理方法

目录 MyBatis中多对一关系的三种处理方法 1.通过级联属性赋值 1)mapper 2)mapper.xml 3)测试代码 4)测试结果 2.通过标签 1)mapper 2)mapper.xml 3)测试代码 4)测试结果 3.分步查询 …

【技术调研】三维(4)-ThreeJs阴影投射、光线投射及案例

阴影投射 阴影是灯光经过物体后产生的,几个关键的设置: 灯光属性设置:.castShadow : Boolean 。此属性设置为 true 灯光将投射阴影。注意:这样做的代价比较高,需要通过调整让阴影看起来正确。 查看 DirectionalLight…

STM32(十四):USART串口数据包

HEX数据包 0xFF包头,0xFE包尾。 如果数据和包头包尾重复,可能会引起误判。 解决办法: 1. 限制载荷数据的范围 2. 如果无法避免载荷数据和包头包尾重复,就使用尽量使用固定长度数据包。 包头 ‘\r\n 包尾 在载荷数据中间可以出现…

代码23. 合并 K 个升序链表

模拟面试的时候没做出来,心碎了。 题目链接 . - 力扣(LeetCode) 自己的思考 无思考,直接看答案吧。 正确答案 其实写还是自己写的,看了下题解的思路。 第一种 思路简单,两两合并,注意事项已…

李飞飞任CEO,空间智能公司World Labs亮相,全明星阵容曝光

人工智能的下个大方向已经出现,标志性学者决定下场创业。 本周五,一个重磅消息引爆了 AI 圈:斯坦福大学计算机科学家李飞飞正式宣布创办 AI 初创公司 ——World Labs,旨在向人工智能系统传授有关物理现实的深入知识。 李飞飞说道&…

【检索快,IEEE独立出版】2024年第四届电子信息工程与计算机科学国际会议(EIECS 2024)

大会简介: 2024年第四届电子信息工程与计算机科学国际会议(EIECS 2024)将于2024年9月27日至29日在中国延吉举行。会议由长春理工大学主办,延边大学、长春理工大学电子信息工程学院、长春理工大学计算机科学技术学院、长春理工大学…

数据结构——栈和队列(栈的顺序存储结构和链式存储结构)

栈的定义 栈是一种重要的线性结构,可以这样讲,栈是前面讲过的线性表的一种具体形式。就像我们刚才的例子,栈这种后进先出的数据结构应用是非常广泛的。在生活中,例如我们的浏览器,每次点击一次“后退”都是退回到最近…

数据库密钥管理的密钥生成

数据库密钥管理是指对数据库中使用的加密密钥进行的一系列安全操作,以确保数据的机密性、完整性和可用性。这一管理过程通常包括密钥的生成、存储、分发、使用和销毁等环节。以下是关于数据库密钥管理的详细解析: 一、密钥的生成 目的:生成用…

谷歌图像生成AI-imagen 3新手入门指南!

1Google 最近推出了 Imagen 3,这是目前为止其最先进的文本生成图像模型。它基于之前的版本进行了改进,提供了更加精确的图像生成,减少了图像中的瑕疵,能够生成逼真、栩栩如生的图像。相比于早期版本,Imagen 3 可以处理…

Linux:重定向以及管道

重定向(重新定向命令的输出) 将前面命令的输出,作为内容,写入到后面的文件 管道 管道(操作符号 | ) 作用:将前面命令的输出,传递给后面命令,作为后面命令的参数…

通信工程学习:什么是SNI业务节点接口

SNI:业务节点接口 SNI业务节点接口,全称Service Node Interface,是接入网(AN)和一个业务节点(SN)之间的接口,位于接入网的业务侧。这一接口在通信网络中扮演着重要的角色&#xff0c…

【机器学习-四-无监督学习unsupervise learning-聚类算法简介】

无监督学习unsupervise learning 聚类聚类的过程相似度度量方法聚类的方法划分式层次聚类基于密度的聚类 上一节讲的无监督学习,但是很多人可能会很疑惑,没有目标,那算法是怎么学会该怎样分类的呢?今天就简介一下其中的聚类算法。…

使用 SpringBoot 基础web开发的支持

首先导入项目相关的依赖&#xff1a; pom.xml 文件&#xff1a; 导入相关项目依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-in…

句子成分——每日一划(八)

目录 一、原句 二、第一部分 三、第二部分 一、原句 In class society everyone lives as a member of a particular class, and every kind of thinking, without exception, is stamped with the brand of a class. 来源&#xff1a;二、阶级和阶级斗争 二、第一部分 In…

免费像素画绘制软件 | Pixelorama v1.0.3

Pixelorama 是一款开源像素艺术多工具软件&#xff0c;旨在为用户提供一个强大且易于使用的平台来创作各种像素艺术作品&#xff0c;包括精灵、瓷砖和动画。这款软件以其丰富的工具箱、动画支持、像素完美模式、剪裁遮罩、预制及可导入的调色板等特色功能&#xff0c;满足了像素…

凑数字dp解决

前言&#xff1a;没有想到这个题目可以用dp来做&#xff0c;我们之前能够达到的最大的数字 当前的这一个数字为当前最大的数 ‘题目地址 #include<bits/stdc.h> using namespace std;#define int long long const int N (int)1e510;signed main() {int t; cin >>…

[全网首发]怎么让国行版iPhone使用苹果Apple Intelligence

全文共分为两个部分&#xff1a;第一让苹果手机接入AI&#xff0c;第二是让苹果手机接入ChatGPT 4o功能。 一、国行版iPhone开通 Apple Intelligence教程 打破限制&#xff1a;让国行版苹果手机也能接入AI 此次发布会上&#xff0c;虽然国行 iPhone16 系列不支持 GPT-4o&…

【Vue】2

1 Vue 生命周期 Vue生命周期&#xff1a;一个 Vue 实例从 创建 到 销毁 的整个过程 创建(create)阶段&#xff1a;组件实例化时&#xff0c;初始化数据、事件、计算属性等挂载(mount)阶段&#xff1a;将模板渲染并挂载到 DOM 上更新(update)阶段&#xff1a;当数据发生变化时…

Qt:饿汉单例(附带单例使用和内存管理)

前言 本文主要写饿汉单例以及单例的释放&#xff0c;网上很多教程只有单例的创建&#xff0c;但是并没有告诉我们单例的内存管理&#xff0c;这就很头疼。 正文 饿汉式单例 // SingletonClass.h #ifndef SINGLETONCLASS_H #define SINGLETONCLASS_H #include <QObject&g…

【Android Studio】使用雷电模拟器调试

文章目录 进入开发者模式使雷电模拟器adb连接PC测试 进入开发者模式 多次点击版本号 -开区USB调试 使雷电模拟器adb连接PC 写cmd脚本 雷电模拟器端口为5555 &#xff0c;脚本内容如下&#xff1a; adb.exe connect 127.0.0.1:5555双击bat脚本文件 测试