用户行为系统 如何记录行为数据

最近准备把我主持并负责的前端用户行为系统开源了,这个系统我们内部命名为 marmot 。中文为「土拨鼠」,有挖掘之意。 除我之外,还有两位开发人员分别是: seven 和 cyhello 。

本篇文章简短的说明一下 marmot 的 log 重点问题:

  1. 解决不同分辩率的策略.
  2. 解决粒度过细的问题.
  3. 还原路径问题.
  4. 何时发回数据及数据量的问题

分辩率策略

默认原点以 p(0,0) 开始计算,如果是定宽页面,p(0,0) 坐标在不同辩率下得到的坐标是不同的.如何解决这一问题. 普遍情况下会采取截面坐标. 分析目前页面几种类型:

  • 页面居左布局原点坐标从 p(0,0) 开始计算。
  • 页面居中布局原点坐标从 p(document.documentElement.scrollWidth/2|0,0) 开始计算。
  • 百分比的宽其实也是可以定位的,原理也是引入相对坐标系,但也有一些劣势,这里不展开了。

页面像素粒度切分

每个页面默认粒度为 pixel(1,1) ,即 1 像素为单位。 这样的优点是数据不失真,但缺点则是数据量传输和存储量大。

大多数时候我们是不需要按 pixel(1,1) 来计算的。而解决这一问题的思路很简单:

  • 页面做先 grid 化, pixel(n,n) 。
  • 数量为: Math.floor(document.documentElement.scrollWidth/n) 。「 n 为象素比例尺」

还原路径

  • 可以序列化 DOM path 成 selector 。
  • 以 previousSibling + ancestor 不断向上递归出 presudo selector( 伪 selector) 。

何时发回及发回数据量

beforeunload 异步发回。 数据量不会太大, HTTP 里 GET 方式请求我们所知:

  • IE6 2K 数据 ( 已知 ) 。
  • IE7+5K 左右 ( 记得之前我测过,印象中是这个数据 ) ,非 IE 都有 >= 2K 的数据量。

肯定有人问发回的比例是多少,据 dron 同学统计过约 80%左右。
虽说不是绝对发回来,但足够你用。
采样率 5K~1W 左右 pv 的操作发回,数据最大为 2K*1W 约 20~30M log 不算多。

Comments