背景:
在优化页面启动性能时,把某一个独立分包里的一个页面的渲染引擎切换成了 Skyline,目前该页面的安卓性能数据存在丢失的情况。
问题:
经排查,大致范围确定是使用 wx.getPerformance 获取性能数据进行上报时,在 entryType 为 navigation 时,appLaunch 节点没有被触发。(测试时,机型:REDMI,操作系统:Android 11,微信版本:8.0.54,基础库版本:3.6.6 2024.11.24 21:13:21)
页面 page.json:
{
"renderer": "skyline", // 切换为 webview 后可正常上报
"componentFramework": "glass-easel",
"disableScroll": true,
"navigationStyle": "custom",
"backgroundColor": "#F9F9F9",
"backgroundTextStyle": "light",
"usingComponents": {
"v-price": "../../components/price",
"v-loading": "../../components/dkn_loading",
"v-collapse": "../../components/collapse",
"v-register": "../../components/register",
"privacy-contract":"../../components/privacy_contract",
"card-gift": "../../components/card_gift",
"card-coupon": "../../../commonPackage/checkout_card_coupon"
},
"componentPlaceholder": {
"v-collapse": "view",
"v-register": "view",
"privacy-contract": "view",
"card-gift": "view",
"card-coupon": "view"
},
"initialRenderingCache": "static",
"rendererOptions": {
"skyline": {
"defaultDisplayBlock": true,
"defaultContentBox": true,
"disableABTest": true,
"iosVersionBegin": "8.0.34",
"iosVersionEnd": "15.255.255",
"androidVersionBegin": "8.0.33",
"androidVersionEnd": "15.255.255"
}
},
"trackingTitle": "确认订单",
"trackingType": "Checkout"
}
性能上报相关逻辑(appLaunch 节点不会执行到):
const performanceObserverHandler = entryList => {
const entries = entryList.getEntries();
entries.forEach(entry => {
const { duration, entryType, name, path, navigationType, startTime, packageName } = entry;
switch (entryType) {
case 'navigation':
if (name === 'appLaunch') {
// 获取 duration - (这里不会被执行到)
const app_launch_time = duration;
// 上报 app_launch_time
// report({ xxx })
} else {
if (name === 'route') {
// const route_time = duration;
}
}
break;
case 'render':
if (name === 'firstRender') {
// const first_render_time = duration;
// report({ xxx })
}
break;
case 'script':
// let invoke_scripts_time = (invoke_scripts_time || 0) + duration;
// report({ xxx })
break;
}
});
};
const enablePerformanceMonitoring = () => {
try {
const performance = wx.getPerformance();
const observer = performance.createObserver(performanceObserverHandler);
observer.observe({ entryTypes: ['render', 'script', 'navigation', 'loadPackage'] });
} catch (e) { console.log('doesnt support performance monitoring'); }
};
其他相关信息:
1、因为机型、微信版本、基础库版本等变量过多,不能完全确定是哪一项的问题,目前已测试的情况如下:
2、微信开发者工具测试时可以正常触发 appLaunch 性能节点,但是上传开发版本后用安卓真机(机型:REDMI,操作系统:Android 11,微信版本:8.0.54,基础库版本:3.6.6 2024.11.24 21:13:21)来测试时无法触发 appLaunch 这个性能节点。
3、当把 page.json 的里 render 从 skyline 切换为 webview 后,用手头的安卓真机(机型:REDMI,操作系统:Android 11,微信版本:8.0.54,基础库版本:3.6.6 2024.11.24 21:13:21)来测试时可以正常触发 appLaunch 性能节点。
4、iOS 没有经过多台设备来测试,但是从性能数据的上报情况来看,和以往的数据上报量差不多。手头的 iOS 设备测试时均能正常上报。
感谢反馈,我这边尝试写了一个代码片段,但是好像并没有复现这个问题。你可以试试我这个片段看能不能复现问题?
https://developers.weixin.qq.com/s/jPXT00m37vWc
我这边的测试机器为:Android14、微信 8.0.54、基础库 3.6.6 (2024.11.24 21:13:21)
如果还是复现的话,麻烦上传下日志并提供下微信号
上传日志方法:我->设置->帮助与反馈->右上角扳手上传日志,并提供微信号与时间点
下面是代码示例,把下面代码片段的 wx:if="showRegisterSelector" 换成合适的 wx:if="{{ showRegisterSelector }}" 后之前不上报的安卓机型已经有部分可以触发 appLaunch 了,但是依然有部分安卓不触发 appLaunch 这个节点(如下方附上的图里的华为 )。在上面你提供的小程序片段里,我用之前的安卓机测试是完成正常的(机型:REDMI,操作系统:Android 11,微信版本:8.0.54,基础库版本:3.6.6 2024.11.24 21:13:21),模仿下面的写法后,就不会触发 appLaunch 节点。
// index.js
async onReady() {
// xxx
perfUtils.enablePerformanceMonitoring()
// xxx
this.lazyRenderComponent()
},
lazyRenderComponent() {
setTimeout(() => {
this.setData({
showRegisterSelector: true,
})
}, 0);
},
// index.json
同正文
// index.wxml
// xxx 省略其他的 wxml 节点
<block wx:if="showRegisterSelector"><v-register xxx></v-register></block>