在某些情况下,例如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'];