# SDK架构
一个项目的架构不可能一蹴而就,我们永远不要为了设计而设计。坚持一个核心观念,技术是为业务服务的。业务是不停地迭代的,技术架构也是如此,我会将每次架构都罗列在这里,并会说明改动原因,让大家随着项目发展而深入,而不是说一上来就要看一个很复杂的架构,这样你也懒得看,我也懒得写。
# 监控流程
sdk 的监控流程分为三部分
- 用户初始进入页面
- 用户行为
- 页面出现异常
# 上报方式
- 主动上报:用户触发特定的行为时上报,如点击购买按钮
- 被动上报:特定情况下触发的上报行为,如页面关闭时
# 埋点方案
常见埋点方案分为三种:代码埋点、可视化埋点、无痕埋点。本次项目前期我们先使用代码埋点的方式,后续再添加其他两种模式。
# 代码埋点
又称为侵入式埋点,是最常用的埋点方式之一。需要开发者手动在代码中添加的埋点代码,并根据需求在不同的位置添加不同的埋点事件。虽然这种方式需要一定的开发成本,但它可以精确地捕获页面中发生的事件。
# 可视化埋点
可视化埋点是一种通过图形界面进行埋点的方式。开发人员可以通过可视化页面来添加埋点事件,而无需手动修改代码。这种方式减少了开发人员的开发成本,但可能会导致一些事件被遗漏或无法精确地捕获。
# 无痕埋点
无痕埋点是一种通过对用户行为进行数据采集来实现的埋点方式。它不需要修改代码,而是在客户端上捕获用户所有的行为并将其发送到后端统计服务器进行分析。这种方式可以减少开发人员的工作量,并且可以采集到更全面的用户行为数据,但可能会影响页面的性能。
# 代码管理方式
sdk采用monorepo的方式,使用lerna (opens new window)工具进行代码管理,好处在于
- 提高开发体验:分模块打包、更新、发布
- 降低代码之间的耦合性:抽离公共代码到特定的包,代码结构清晰
# 插件模式
我们的SDK 要支持多种平台,又要尽可能的覆盖功能,又要拓展性,那怎么去设计这个架构呢?
受益于前端各大成熟项目的启发,也为了项目后续的拓展和用户的二次开发,项目决定采用内核 + 插件
模式为整个项目的主要架构模式,通过将可复用的核心代码集成到内核中,其余能力拓展为插件,使用时根据不同平台的特性,集成不同的插件,达到灵活可拓展的目标。
# 生命周期
图中蓝色部分为sdk自身的生命周期
Init
初始化SDK自身Collection
收集基础数据Clean
清理并组装数据,为上传数据做准备Upload
上传数据Destroy
销毁阶段
红色部分为插件可用hooks
Init
在SDK初始化完毕后,会依次调用插件的init方法,开发者可在此做一些初始化操作Monitor
在SDK采集完毕后,会依次调用插件的monitor方法,开发者可在此定义自己的数据采集方法TransForm
在SDK清洗完数据后,会依次调用插件的transform方法,开发者可在此处理上传的数据Destroy
在SDK采集完毕后,会依次调用插件的destroy方法,开发者可在此处理销毁定时器监听之类的(虽然很少用到)