创见博客
全埋点的实现原理
七崽爱吃小饼干2026/03/06阅读 1

一、一句话总定义

全埋点(无埋点)就是:不侵入业务代码,通过 SDK 自动监听、采集、上报用户行为数据的技术方案。

核心技术:事件委托 + 全局 API 劫持 + 浏览器原生监听。


二、Web 全埋点 4 大核心实现原理

1. 点击事件采集:事件委托(最核心)

原理

利用浏览器事件冒泡机制,只在 document 上绑定一次点击事件,就能捕获页面上所有元素的点击,包括动态渲染的 DOM(列表、弹窗、异步加载按钮)。

实现步骤

  1. 给 document 绑定 click 捕获/冒泡事件
  2. 用户点击任何元素 → 事件冒泡到 document
  3. 通过 event.target 拿到真正被点击的元素
  4. 自动采集元素信息:XPath、ID、Class、文本、坐标
  5. 组装事件数据 → 上报

为什么必须用事件委托?

  • 不用给每个按钮绑事件 → 零侵入
  • 动态 DOM 也能捕获 → 全覆盖
  • 只绑定 1 次 → 性能极高

2. 页面访问采集:路由监听(PV/UV)

原理

监听浏览器地址变化,自动采集页面进入、离开、停留时长。

实现方式

  1. 监听 hashchange:哈希路由变化
  2. 监听 popstate:History 路由回退/前进
  3. 劫持 pushState/replaceState:捕获代码跳转
  4. 页面加载完成:触发首次 PV

采集数据

URL、标题、来源页、停留时间、进入/离开时间。


3. 请求/错误/性能采集:API 劫持

原理

重写浏览器原生 API,在不影响业务的前提下,自动采集数据。

劫持对象

  1. XMLHttpRequest → 监听所有 Ajax 请求
  2. fetch → 监听现代接口请求
  3. window.onerror / unhandledrejection → 监听 JS 错误
  4. Performance API → 采集页面性能(FP/FCP/LCP)
  5. Navigator → 采集设备信息(机型、系统、屏幕)

作用

自动监控接口成功率、错误率、页面加载速度。


4. 页面停留 & 关闭:生命周期监听

原理

利用浏览器页面生命周期事件,计算用户停留时长。

实现

  1. 进入页面记录开始时间
  2. 监听:
    • beforeunload 页面关闭
    • visibilitychange 页面隐藏/显示
    • pagehide 页面离开
  3. 计算:离开时间 - 进入时间 = 停留时长
  4. 使用 navigator.sendBeacon 保证关闭时数据不丢失

三、全埋点完整流程

全埋点实现分为 5 步:

  1. SDK 初始化
  • 加载SDK → 生成用户唯一标识 UUID → 读取配置。
  1. 全局监听挂载
  • 绑定事件委托点击监听
  • 绑定路由监听
  • 劫持请求、错误、性能API
  • 绑定页面生命周期
  1. 用户行为触发
  • 点击、页面切换、接口请求、报错、离开页面。
  1. 自动采集数据
  • 通过 event.target 拿到元素
  • 通过劫持拿到请求/错误
  • 通过生命周期拿到时长
  1. 数据处理与上报
  • 去重、脱敏、批量、节流
  • 使用 sendBeacon / fetch 异步上报
  • 失败缓存重试

四、最关键技术总结

  1. 点击采集 = 事件委托
  2. 页面切换 = 路由劫持 + History 监听
  3. 接口/错误 = 重写原生 API
  4. 停留时长 = 页面生命周期监听
  5. 不丢数据 = sendBeacon
  6. 性能 = 批量上报 + 防抖节流
评论
0/100