在某些情况下,例如SDK尚未完成初始化时,会导致数据上报出现问题。本文介绍如何使用ARMS前端监控SDK实现数据预上报。
会导致数据上报出现问题的情形
以下情形会导致数据上报出现问题:
- 在页面刚刚加载时,有一些数据需要上报,但此时SDK可能还未完成初始化,或者不确定是否已完成初始化。
- 在应用的初始化逻辑中调用setConfig方法,但由于SDK是异步加载的,此时可能还未加载完成。
解决办法
SDK在__bl
对象上增加了一个pipe属性,用于将预调用的信息缓存到此变量中。例如:
__bl.pipe = [
// 将当前页面的HTML也作为一个API上报。
['api', '/index.html', true, performance.now, 'SUCCESS'], //相当于__bl.api(api, success, time, code, msg)。
// SDK初始化完成后即开启SPA自动解析。
['setConfig', {enableSPA: true}]
];
如果只上报单条数据,也可以直接写成:
__bl.pipe = ['msg', '我是另一个普通的消息'];
其中数组的第0个表示方法名,后面依次是入参。SDK初始化完成后,就会依次调用预先挂载到window.__bl.pipe
上的方法及参数。
说明 在SDK初始化完成前,如果多次设置
__bl.pipe
的值,则以最后设置的为准。
如果不能确定SDK是否初始化完成,又不想添加太多判断逻辑,也可以在SDK初始化完成后调用pipe(支持IE9及以上)。
例如,单页面应用中,设置autoSend: false
后,在应用初始化后上报第一次PV,此时并不确定SDK是否初始化完成。
// 设置页面name为 'homepage',并且上报PV。
__bl.pipe = ['setPage', 'homepage'];