01.探究微信小程序分包打开失败率技术方案
发布于 4 年前 作者 sxia 3241 次浏览 来自 分享

分包打开失败率的现象

用户点击元素进入分包后,如果分包下载失败,页面标题会正常显示,内容区会联系小程序的Logo和网络无法连接。底部有个重新加载按钮。


模拟分包打开失败的场景

  • step1: 手机配置好代理,能通过 charles(mac环境) 拦截手机的网络请求
  • step2: 重置环境,删除手机里的微信小程序的各个版本(开发版、体验版、线上版)
  • step3: 通过微信小程序助手,打开开发版(或者体验版)的小程序,开启调试模式
  • step4: 再次访问小程序,charles 能看到手机的 http 请求
  • step5: 关闭 charles 工具,点击按钮进入分包页面(或者通过 vConsole 输入跳转代码也行),能够正常进入分包页,但会出现分包加载失败

从代码层面看分包打开失败率

断开网络进入分包页面,分页页面的代码没有执行。

开启网络后,点击重新加载后,页面的 onLoad 被执行了,同时看到了 onLoad 代码里打印的 console。

分包打开失败率的监控想法

当用户打开分包失败时,分包的 onLoad 不会执行,但是 navigation 方法会正常返回结果,可以利用这个现象, 当页面路由跳转时,打点即为A,分包能正常触发 onLoad,打点为B,失败率 = (A - B) / A。

监控指标图如下:

在忽略上报埋点丢失的情况下,每一次新开分包(或页面)时,加载成功的话,uuid 和 page_name 联合查询的记录数量都是 2。

监控字段说明

  • uuid: uuid 唯一标识,每次调用官方提供的路由方法,都会生成一个
  • page_name: 要打开分页的页面路径(这里采用的是别名)

伪代码实现

  • step1: 调用 wx.redirection 打点A
// pages/main/index.js
wx.navigateTo({
    url: '/pages/user/authManager/index',
    success: (value) => {
        console.log('value:', value)
    },
    fail: (err) => {
        console.log('err:', err)
    },
    complete: (data) => {
        SendLog({
            eventName: 'A',
            uuid: '0916b840-69f5-11eb-96a2-0385783e8b01',
            page_name: 'authManager'
        })
        console.log('data:', data)
    }
})


  • step2: 页面 onLoad 打点 B
// pages/user/authManager/index.js
onLoad() {
    SendLog({
        eventName: 'B',
        uuid: '0916b840-69f5-11eb-96a2-0385783e8b01',
        page_name: 'authManager'
    })
}
1 回复

欢迎各位大佬一起来探讨!

回到顶部