关于前端:神策数据微信小程序-SDK-架构解析

39次阅读

共计 3051 个字符,预计需要花费 8 分钟才能阅读完成。

1. 前言

神策数据微信小程序 SDK,是一款轻量级用于微信小程序端的数据采集埋点 SDK,蕴含代码埋点、全埋点性能。其中,全埋点性能通过代理微信小程序原生 App、Page、Component 接口及相应生命周期函数来实现。上面将以 SDK 版本 v1.13.28 为例介绍微信小程序 SDK 的架构。

2. 目录构造

神策数据微信小程序 SDK 自开源以来,SDK 的代码和目录构造一直调整、优化。目前开源代码中存在 product 目录以及其余不同版本的源码文件,如图 2-1 所示:

图 2-1 微信小程序 SDK 源码目录
其中,几个次要目录的介绍如下:
/product:未压缩的源码文件;
/sensorsdata.custom.es6.min.js:反对 ES6 导入导出语法的自定义版 SDK 源码文件;
/sensorsdata.custom.min.js:反对 require 语法引入的自定义版 SDK 源码文件;
/sensorsdata.min.es6.js:反对 ES6 导入导出语法的全埋点版 SDK 源码文件;
/sensorsdata.min.js:反对 require 语法引入的全埋点版 SDK 源码文件。

3. 数据流程

数据从采集到发送的流程如图 3-1 所示:

图 3-1 数据流程图
通过上图能够晓得,数据流程次要包含如下几个步骤:
首先会针对上传的事件以及属性做格局校验;
批量发送配置下,将数据缓存到内存与本地,达到发送条件后通过网络发送。发送胜利后将已发送的数据删除,发送失败后进行重试;
实时发送配置下,数据会先保留到发送队列中,而后逐条发送,发送实现后(不管成功失败)将已发送的数据删除;
无论批量发送还是实时发送,申请工夫超过设置的超时工夫(默认为 3 秒)后,都会勾销该申请。

4. 架构解析

4.1 简介

如上所述,神策数据微信小程序 SDK 是一款轻量级用于微信小程序端的数据采集埋点 SDK,而数据采集是构建数据平台的外围因素。数据采集是否残缺、是否精确、是否及时、是否关联买通,都间接影响整个数据平台的利用成果。因而,神策数据微信小程序 SDK 采纳了良好的架构来保证数据的采集。

4.2 架构图

神策数据微信小程序 SDK 总体架构如图 4-1 所示:

图 4-1 微信小程序 SDK 总体架构图

4.3 架构详解

4.3.1 初始化模块

SDK 初始化模块中,次要包含初始化参数配置和初始化数据缓存队列两个性能。

  1. 初始化参数配置
    在引入神策数据微信小程序 SDK 之后,通过调用 setPara() 接口进行 SDK 初始化参数的相干配置。常见的配置项如下:
    server_url:数据接管地址,必须配置,无默认值;
    autoTrack:全埋点管制开关,可通过 autoTrack.appLaunch、autoTrack.appShow、autoTrack.appHide、autoTrack.pageShow、autoTrack.mpClick、autoTrack.pageShare、autoTrack.mpFavorite 别离管制对应全埋点事件的开启和敞开;
    show_log:是否在控制台打印数据。
    其中,全埋点管制的代码如下:
    /**
  2. 初始化 Sensors Analytics SDK
    */
    const sa = require(‘./sensorsdata.min.js’);
    sa.setPara({
    server_url:”,
    autoTrack: {
    appLaunch:true, // 管制是否采集 $MPLaunch
    appShow:true, // 管制是否采集 $MPShow
    appHide:true, // 管制是否采集 $MPHide
    pageShow:true, // 管制是否采集 $MPViewScreen
    pageShare:true, // 管制是否采集 $MPShare
    mpClick:true, // 管制是否采集 $MPClick
    mpFavorite:true// 管制是否采集 $MPAddFavortes
    }
    })
  3. 初始化数据缓存队列
    神策数据微信小程序 SDK 提供了 init() 接口来让开发者决定 SDK 初始化实现的机会,只有当 SDK 初始化实现后,用户触发的事件数据才会通过网络发送进来。否则,数据会被保留到初始化数据缓存队列中,等初始化实现后,再将队列中的数据读发送进来。初始化流程如图 4-2 所示:

图 4-2 初始化流程图

4.3.2 数据采集模块

数据采集模块是外围模块,次要负责精确、残缺地通过埋点来采集数据。数据采集模块次要提供了如下几个性能:
代码埋点:在 SDK 初始化之后,对须要采集的事件,调用 track 接口埋点采集事件;
全埋点:无需开发工程师写代码或者写大量的代码,即可事后主动收集用户的所有或者绝大部分的行为数据;
预置属性:埋点 SDK 主动采集的,任何事件都须要携带的一些最根本的属性(例如操作系统类型、操作系统版本号、运营商信息、应用程序版本号、设施厂商等)。
对于这些性能的介绍,能够参考《神策数据微信小程序 SDK 性能介绍》,这里不再赘述。

4.3.3 数据存储模块

为了最大限度的保障事件数据的准确性和及时性,会要求数据采集 SDK 尽快将事件数据同步到服务端。但在某些状况下(例如用户处于断网环境)会导致事件数据无奈同步或者同步失败;多条事件间断触发时,后触发的事件可能会先达到服务器,导致行为序列差别。
因而,微信小程序 SDK 在采集到数据后,针对实时发送形式,会先把事件数据缓存在一个队列中。待上一条发送申请实现之后,再去发送下一条数据。而针对批量发送形式下,会将数据缓存到内存和本地中,同时应用客户端工夫记录事件触发工夫,待达到触发条件后,再发送。

4.3.4 数据发送模块

在数据存储模块中,介绍了如何把数据存储到客户端本地或者内存队列中。如果事件数据始终缓存着是没有意义的,咱们还须要把数据同步到服务端。而后再通过服务端的存储、抽取、剖析和展示,能力充分发挥数据的价值。因而,数据发送模块次要负责如何把缓存的事件数据同步给服务端。
在微信小程序的开发中,能够间接利用微信小程序提供的封装好的官网接口 wx.request() 进行网络申请的发送。目前,微信小程序 SDK 反对两种发送形式:
实时发送:将存储到缓存队列中的数据逐条读取和发送。后一条数据只有在前一条数据发送实现后,才会被读取进去并发送,前一条数据发送实现后从队列中删除;
批量发送:数据在肯定工夫或者缓存队列中积攒到肯定条数之后,通过 wx.request() 将所有的数据发送进来。申请发送失败时,发送失败的数据在下次发送时与新数据一起发送;申请发送胜利时,会将缓存中已发送的数据删除;
默认状况下,微信小程序 SDK 应用实时发送。批量发送形式能够通过 setPara() 接口设置 batch_send 来配置发送间隔时间和条数。

4.3.5 工具模块

神策数据微信小程序 SDK 提供了许多埋点相干的工具接口,这些辅助工具能够帮忙埋点的实现。例如:_.getUtmFromPage 提供解析以后页面参数的性能;_.getCurrentPath 接口获取以后页面门路;sa.store 对象提供对用户标识的创立、校验、存储等性能。对于这些辅助工具的性能和实现就不再赘述了,具体能够参考 SDK 的源码。

4.3.6 日志模块

初始化参数中 show_log 配置为 true,会开启日志输入性能,能够在微信小程序开发者工具的控制台中打印出采集的数据日志,如下所示:

5. 总结

本文围绕神策数据微信小程序 SDK 的架构进行了全面的介绍,旨在让大家对于 SDK 的架构有一个清晰的理解。对于 SDK 的具体技术实现等相干常识,会在后续的文章中逐渐向大家介绍。

文章起源:神策技术社区

正文完
 0