官方资料:
在 PerformanceEntry 中,name = 'route' 的性能实体,有 startTime、duration、 navigationStart,我想统计页面切换耗时,有一些疑惑:
- startTime 是指,触发 wx.switchTab、wx.navigateTo 等路由切换方法的时刻吗?
- navigationStart 是指,触发路由切换后,前置环境准备已完成(比如包下载、代码注入),真正要开始切路由的时刻吗?
- 路由切换完成的时间应该怎么统计:startTime + duration,还是 navigationStart + duration,还是其它?
- 路由切换完成的时刻,跟切换的目标页面的生命周期(page.onLoad, page.onShow, page.onReady)有关系吗?比如,切换完成后,触发 page.onReady。
startTime 指的是调用路由接口的时间点; navigationStart 是前置条件准备好之后触发的(表示即将要开始路由了); 结束时间是: startTime + duration (这里 duration 是整个路由的耗时); onLoad / onShow 的时机跟 navigationStart 是比较接近的。 onReady 是在页面渲染完成之后触发的,可以对应 firstRender 的时机。
在实际捕获上报的数据,收到不少(具体百分比没统计) navigationStart < startTime,这算是异常数据吗?还是就是会有这种情况?
疑惑2中,关于 navigationStart,结合 firstRender 来看,是逻辑层收到路由事件,也是真正路由开始响应时间。但对于这里的 startTime 和 navigationStart 区别的理解,还是没有本质的帮助。
1. 用户点击视图(有多种交互可以触发,我们以点击为例)
2. 逻辑层收到点击事件
3. 点击事件里面,调用路由切换方法
4. 小程序系统层处理路由切换方法
5. 包下载(非必须)
6. 代码注入(非必须)
7. 开始路由跳转
8. 跳转完成
可以按照这个流程回答下,我上面的疑问。