收藏
回答

页面接入Skyline后,部分安卓wx.getPerformance没有appLaunch性能节点?

AppID
wxdbc3f1ac061903dd

背景:

在优化页面启动性能时,把某一个独立分包里的一个页面的渲染引擎切换成了 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 的里 renderskyline 切换为 webview 后,用手头的安卓真机(机型:REDMI,操作系统:Android 11,微信版本:8.0.54,基础库版本:3.6.6 2024.11.24 21:13:21来测试时可以正常触发 appLaunch 性能节点。

4、iOS 没有经过多台设备来测试,但是从性能数据的上报情况来看,和以往的数据上报量差不多。手头的 iOS 设备测试时均能正常上报。

最后一次编辑于  11-26
回答关注问题邀请回答
收藏

1 个回答

  • 小程序技术专员-Rom
    小程序技术专员-Rom
    11-27

    感谢反馈,我这边尝试写了一个代码片段,但是好像并没有复现这个问题。你可以试试我这个片段看能不能复现问题?

    https://developers.weixin.qq.com/s/jPXT00m37vWc

    我这边的测试机器为:Android14、微信 8.0.54、基础库 3.6.6 (2024.11.24 21:13:21)

    如果还是复现的话,麻烦上传下日志并提供下微信号

    上传日志方法:我->设置->帮助与反馈->右上角扳手上传日志,并提供微信号与时间点

    11-27
    有用
    回复 3
    • 反复横跳选手
      反复横跳选手
      11-27
      谢谢回复,我用手里的安卓机(机型:REDMI,操作系统:Android 11,微信版本:8.0.54,基础库版本:3.6.6 2024.11.24 21:13:21)测试了下这个代码片段,完全正常,可以触发 appLaunch 这个节点。我测试我这边业务的小程序页面就不会触发,我这边再排查下业务上的问题。同时我也上传了这个安卓上的日志,辛苦帮看下日志。(微信号:willTsai_15,时间点:11.27 17:00 ~ 18:00。我这边实际触发的时间大概是 17:00 ~ 17:10 之间,小程序 id: wxdbc3f1ac061903dd,触发页面:omniStore/pages/order/index )
      11-27
      回复
    • 小程序技术专员-Rom
      小程序技术专员-Rom
      11-28回复反复横跳选手
      好的,我们也排查下这个日志看看
      11-28
      回复
    • 反复横跳选手
      反复横跳选手
      12-02回复小程序技术专员-Rom
      Hello, Rom,我这边上周调试了下业务上的一些用法。有个新的发现。


      下面是代码示例,把下面代码片段的 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>
      12-02
      回复
登录 后发表内容