设计核心(WWWWH)

# 设计核心(WWWWH)

⭐️⭐️⭐️ 谁(Who) 在什么时候(When) 什么地方(Where) 干了什么(What) 怎么干的(How) ⭐️⭐️⭐️

# Who

什么是用户
用户指的是访问这个页面的行为人,对于SDK来说使用同一个账户、同一个设备、同一个浏览器来访问页面的"人"就是同一个用户

用户ID
每一次访问都有一个唯一的ID,不论什么时候来访问,用户是否登录,都携带有一个唯一的ID 可以理解为用来标记这个访问设备,有网卡mac地址则使用mac地址(移动端用udid) mac地址、移动端设备id,SDK生成的ID在库中的字段都为 udid

会话ID
会话ID用来标记某段时间内的连续访问为一次用户会话,当用户开始一个新的访问时,会创建一个session_id,存于cookie当中 有效期三十分钟,当有用户交互发生时,会话有效期从交互时刻延长至该交互事件发生时刻的30分钟后,即重置session_id有效期

# When

用户事件发生的时间,这个时间是客户端时间,客户端时间用于对这个客户端上的埋点记录进行排序,来串联用户的交互行为

客户端时间是不准确的,比较准确的推算出用户事件发生的真实时刻,需要三个值:

  1. 事件发生时间
  2. 事件记录发送时间,我们是缓存后,批量发送,需要加上发送时间
  3. 后端接收时间

推算前提:

  • 以后端时间为基准,后端时间是真实可靠的
  • 我们认为客户端发送给后端的这个网络开销时间忽略不计

后端接收时间和客户端发送时间的差值代表了基准时间和客户端时间的差值
推算公式: realTime = receiveTime(后端接收时间) - sendTime(事件发送时间) + time(事件发生时间)

# Where

物理位置: 用户所处的地理位置,通过ip或者app的定位服务计算用户所处在哪个地方

逻辑位置: 事件发生时用户当前所在的页面,事件发生时在页面内的位置信息

来源位置: 事件发生时当前页面的上一个页面

# What

事件的内容

对于页面访问,内容就是页面标题 对于输入事件,内容就是用户输入的内容 对于点击事件,内容就是点击事件采集的规则(参考下方)

# How

用户是怎么触发这个事件的

内置的几种类型:

  • page: 页面切换时会记录该类型数据,页面切换可以多普通页面切换,也可以是调用HistoryAPI,或是hashchange方式。
  • error: 页面发生异常时会记录该类型数据,异常可以是代码异常、接口异常、资源加载异常
  • performance: 性能相关的事件发生时会记录该类型数据,性能事件包括: 页面加载性能、请求响应性能、自定义性能条件触发
  • click: 用户点击交互事件