Gahing's blog Gahing's blog
首页
知识体系
  • 前端基础
  • 应用框架
  • 工程能力
  • 应用基础
  • 专业领域
  • 业务场景
  • 前端晋升 (opens new window)
  • Git
  • 网络基础
  • 算法
  • 数据结构
  • 编程范式
  • 编解码
  • Linux
  • AIGC
  • 其他领域

    • 客户端
    • 服务端
    • 产品设计
软素质
  • 面试经验
  • 人生总结
  • 个人简历
  • 知识卡片
  • 灵感记录
  • 实用技巧
  • 知识科普
  • 友情链接
  • 美食推荐 (opens new window)
  • 收藏夹

    • 优质前端信息源 (opens new window)
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Gahing / francecil

To be best
首页
知识体系
  • 前端基础
  • 应用框架
  • 工程能力
  • 应用基础
  • 专业领域
  • 业务场景
  • 前端晋升 (opens new window)
  • Git
  • 网络基础
  • 算法
  • 数据结构
  • 编程范式
  • 编解码
  • Linux
  • AIGC
  • 其他领域

    • 客户端
    • 服务端
    • 产品设计
软素质
  • 面试经验
  • 人生总结
  • 个人简历
  • 知识卡片
  • 灵感记录
  • 实用技巧
  • 知识科普
  • 友情链接
  • 美食推荐 (opens new window)
  • 收藏夹

    • 优质前端信息源 (opens new window)
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 前端基础

  • 应用框架

  • 工程能力

  • 应用基础

  • 专业领域

    • 服务端

    • 跨端技术

    • Web IDE

    • 中后台

    • 动效渲染

    • 可视化

    • 埋点监控

      • 埋点方案介绍(代码、可视化、无痕)
        • 代码埋点
          • 解耦问题
          • 参数校验
        • 可视化埋点
        • 无痕埋点
    • 多媒体

    • 桌面技术

    • 游戏互动

    • 编辑器

    • 虚拟化与容器化

    • 设计系统

  • 业务场景

  • 大前端
  • 专业领域
  • 埋点监控
gahing
2023-08-30
目录

埋点方案介绍(代码、可视化、无痕)笔记

3 种埋点方案

  1. 代码埋点
  2. 可视化埋点
  3. 无痕埋点

# 代码埋点

在应用代码中手动插入特定代码来收集数据,通常在点击和展现回调中上报

  • 优点:灵活、准确
  • 缺点:维护负担;需要介入代码
  • 适用场景:大多数场景
  • 注意事项:
    • 代码解耦
    • 参数校验

# 解耦问题

状态、hook、UI 组件需要相互解耦:

  1. 涉及埋点的状态,尽量抽离至外部。共同配合。数据抽到外层,埋点调用包装 hook,UI 组件仅传入必要参数给 hook
// 两种上报方式
const Item = function() {
  const handleClick = useReportClick((report) => {
    report({a: 1})
  }, [])
  return <button onClick={handleClick}></button>
} 

const Item2 = function(){
  const report = useReport()
  const handleClick = () => {
    report({a: 1})
  }

  return <button onClick={handleClick}></button>
} 

// hooks
const useReportClick = (handler, deps) => {
  const user = useAtom(userAtom)
  const report = (props) => {
    realReport({...props, uid: user.id})
  }
  return useCallback(() => {
    handler(report)
  }, deps)
}

const useReport = () => {
  const user = useAtom(userAtom)
  return (props) => {
    realReport({...props, uid: user.id})
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34

可能还有更好的抽象模式,后续可以参考 Lyra 的埋点模型设计。

# 参数校验

如何在开发阶段进行埋点校验,埋点防劣化

  1. 埋点平台定义各埋点的参数格式
  2. 开发环境拉取埋点的类型定义
  3. 静态检测:埋点代码编写时进行类型检测
  4. 运行时检测:线上运行埋点校验(统计不符预期的埋点情况)

WIP:后续有空再梳理具体实现方案

# 可视化埋点

利用可视化工具配置需要收集的事件、属性和数据,然后将工具生成的代码嵌入应用中。

  • 优点:技术门槛低;无代码维护问题
  • 缺点:灵活性受可视化工具限制;难以定制
  • 适用场景:运营类页面

# 无痕埋点

自动捕获和上报,无代码介入

  • 优点:无技术门槛和任何开发成本
  • 缺点:无法完全捕获;可能会引起
  • 适用场景:技术指标,...
编辑 (opens new window)
上次更新: 2025/06/11, 23:06:59
D3使用要点
video标签下触摸坐标归一化

← D3使用要点 video标签下触摸坐标归一化→

最近更新
01
我的 2024 总结
12-31
02
浅谈代码质量与量化指标
08-27
03
快速理解 JS 装饰器
08-26
更多文章>
Theme by Vdoing | Copyright © 2016-2025 Gahing | 闽ICP备19024221号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式