为什么需要埋点

互联网 2.0 时代的产品比较喜欢讲究千人千面,运营与产品团队非常注重观察用户使用产品的行为轨迹,从而能够精准推荐到“猜你喜欢”。研发团队也会非常关注产品的性能和异常,确保产品的高性能以及高安全性。

埋点 & 上报

埋点(监控)内容

  • 用户数据

    • PV / UV
    • 点击位置 / 浏览位置 / 浏览时间
    • 入口
    • 触发的行为
    • ……
  • 页面性能

    • 不同用户不同机型不同系统加载时间
    • 接口请求时间 / 页面渲染时间
    • ……
  • 系统异常

    • 系统报错
    • ……

上报

常见上报方式:

  • 请求接口

  • 请求普通文件

  • 请求图片

弊端:

  • 请求接口:场景复杂,容易出现跨域

  • 请求普通文件(js/css/ttf 等):浏览器创建 DOM 树之后才会请求资源节点,大量请求 js/css 等资源还会阻塞页面渲染

选择图片打点的原因:

图片打点不需要操作 DOM,得利于 img 的 src 属性,只需要在 js 中 new 一个 image 对象就可以发起请求,而且也没有页面阻塞的问题,且页面关闭的时候,采用 img 发出的请求也不会被取消


let img = new Image();
img.src = 'https://static.example.com/track.gif?data=xxx';

图片为什么选择 GIF

同样是 1x1 像素的透明图片,GIF 的体积最小。

  • 最小的 BMP 文件需要 74 个字节
  • 最小的 PNG 需要 67 字节
  • 最小的 GIF 需要 43 字节

前端埋点选择 GIF 的主要原因

  • 不跨域
  • 不阻塞页面加载
  • 体积小
  • 闭页面的时候图片的请求还能发出去