新的统计功能设计
用户在浏览器(多页应用、单页应用)、React Native、小程序、Node.js 等平台上使用 Analytics 功能。不像 iOS 或安卓的 SDK,JavaScript SDK 所适用的平台在统计需求上的需求与概念是不同的。具体说,多页 Web 应用缺少 session 的概念,所以使用次数、时长、频率、路径分析这些功能都无法实现。在其他平台上,由于路由的方案不相同,访问页面的功能需要用户根据使用的路由实现手动标记页面跳转。
在实现上,JavaScript SDK 内置的 AV.Analytics 负责 client 的生成与本地持久化,事件队列的维护与持久化,对 RestAPI 的调用,提供 Session/Page/Event、end(结束并发送) 的 API。但是对这些 API 调用时机是由应用层决定的,初始化 SDK 统计模块本身不会发送任何统计请求。
用户可以自己通过在合适的时机调用上述 API 来实现各种模型的映射。针对一些常见的需求,我们提供插件来在不同的平台中为用户自动调用这些 API 来简化用户的操作,比如针对 Web 平台提供1)一个在页面关闭时发送统计的插件,2)一个在计算持续时间时过滤掉页面不活跃状态时间的插件,3)针对 SPA 提供一个页面加载时自动 startSession 的插件,4)针对多页应用提供一个页面加载时自动 startPage 的插件。
最后将上述插件组合成得到解决方案。 将 1、2、4 组合成多页 Web 应用的统计插件,用户需要引入 AV.Analytics 然后 use 这个插件即可实现页面的自动追踪。 将 1、2、3 组合成 SPA 统计插件,用户需要引入 AV.Analytics、use 这个插件,然后在 router 中调用 startPage 来实现 session 与页面的追踪。 在 SDK 的 browser 版本中,这两个插件将挂载在 AV.Analytics 下。 React Native、小程序、node 以及涉及具体前端框架的 SPA 方案可以通过类似的方式扩展,但暂时不考虑官方的支持。
API 层面,AV.Analytics 将提供 session、page、event 三个 API 表示开始一个新的 Session、Page、Event,返回的实例均可以调用 end 方法表示结束该次记录,实例上可以设置属性。多个 Events 从属于一个 Session,Page 是特殊的 Event。在同一时刻只会存在一个 active 的 Session 与 Page,开始下一个 Session 或 Page 会自动结束上一个。AV.Analytics.end 方法会结束当前的 Session。SDK 发送数据的策略不可配置,固定为以下条件的任一个满足既发送:
- Analytics 初始化时发现队列不为空
- 事件队列长度达到 50
- 距离上一个事件的加入过去了 3分钟
- 当前 Session 结束
事件队列在发送完成之后清空。
具体说,多页 Web 应用缺少 session 的概念,所以使用次数、时长、频率、路径分析这些功能都无法实现。
其实现在的 Web 统计工具还是有这些功能的。比如 GA 应该就是自己种 cookie 来标记 session 和用户。