网站埋点统计实现原理简述

什么是网站埋点统计

收集网页访问相关的数据信息,以用于数据统计分析。如:网站访问量(PV/UV)、页面停留时间、访问来源、搜索引擎分布、浏览器版本分布、用户区域分布、页面热点区域等等。

相关概念(PV,UV,IP)

PV(访问量)
即page View,是指当前页面的浏览量或者点击量,页面刷新一次或者重载一次都要+1。

UV(独立访客)
即Unique Visitor,是将访问网站的一台客户端作为一个访客来看待,每天0:00-23:59同一个客户端只记一次。页面刷新不会+1

IP(独立IP)
即Internet Protocol,独立IP数,每天0:00-23:59同一个IP只记一次。

实现原理

对比了目前主流的几家产品,友盟+(cnzz 统计)、google Analytics、百度统计、腾讯分析、51la等,实现方式都大致相同。

  • 前端客户端负责采集数据,打包整理好待发送的数据
  • 在合适的时机将数据发送给服务器
  • 服务器将接受到的数据清洗,整理
  • 在后台系统中已报表图形的方式呈现出来

实现方式

  • 实现方式上,前端方面主要在于如何最轻便的把数据发送到统计服务器。
  • 目前公认比较成熟的方案是:通过请求服务器上的一张1x1大小的gif图片,或者请求一个1x1的不可见像素的方式将数据发送到服务器,将你需要传递的数据组装好之后,以请求参数queryString的形式请求服务器上的gif图片或其他资源
  • 至于如何区分是不是独立的访客,第一次请求gif文件或其他资源文件的时候,会在客户端写入一份cookie,以后每次请求都会携带这个cookie的值,服务器在数据清洗的时候就可以区分具体访客了

几种埋点工具

  • 友盟cnzz统计:请求一个1x1的不可见像素

  • 51LA统计

  • 百度统计

为什要用请求资源的形式而不用REST API

  • 其实原因很简单,埋点不需要来自服务器的任何返回数据,而是想要将信息发送到服务器。因此,客户端请求的服务器资源纯粹是预先设置的,客户端甚至不需要该资源。
  • GET请求是为该传输选择的Request Method,这意味着必须将数据打包到GET请求的请求头中。
    GET请求是从客户端到服务器的请求,因此客户端必须从服务器请求资源才能使其成为有效的GET请求,所以请求一个“假”资源。
  • 因此,使该资源尽可能小和不引人注意是有意义的,这就是为什么它是gif格式的1x1透明像素。
  • 至于为什么用gif不同别的类型图片,那是因为几种类型的图片文件中(bmp, png,jpg,gif等)gif最小了。

您的支持将鼓励我继续前行!