收藏
回答

分页下拉数据时候,安卓小程序setData渲染耗时长,非常慢。

问题模块 框架类型 问题类型 终端类型 微信版本 基础库版本
框架 小程序 Bug 客户端 6.7.3 2.4.2

- 当前 Bug 的表现(可附上截图)

小程序setData很慢,从setData前到setData回调完成,代码流程计算时间如下图。



每次下拉请求回来的数据是10条,数据格式如下:





真机实测,数据打印如下:

图一9秒:


图二高达53秒:



最后一次编辑于  2018-12-24  (未经腾讯允许,不得转载)
回答关注问题邀请回答
收藏

2 个回答

  • ღ᭄Fall In Dream🍃࿐
    ღ᭄Fall In Dream🍃࿐
    2018-12-21

    最新的代码片段,请大神帮忙测试看下~~

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

    2018-12-21
    赞同
    回复
  • 放空
    放空
    2018-12-21

    https://developers.weixin.qq.com/miniprogram/dev/framework/app-service/page.html#pageprototypesetdataobject-data-function-callback

    参数说明

    字段类型必填描述最低版本
    dataObject这次要改变的数据
    callbackFunctionsetData引起的界面更新渲染完毕后的回调函数1.5.0

    callback 是 data改变后 页面重新渲染 完毕后  的回调;

    考虑是否你渲染页面花费时间较长。

    另外注意下面的第三点,看你只是置了一个list的json数据,应该没有很大吧

    1. 直接修改 this.data 而不调用 this.setData 是无法改变页面的状态的,还会造成数据不一致

    2. 仅支持设置可 JSON 化的数据。

    3. 单次设置的数据不能超过1024kB,请尽量避免一次设置过多的数据。

    4. 请不要把 data 中任何一项的 value 设为 undefined ,否则这一项将不被设置并可能遗留一些潜在问题。


    2018-12-21
    赞同
    回复 8
    • ღ᭄Fall In Dream🍃࿐
      ღ᭄Fall In Dream🍃࿐
      2018-12-21

      直接修改 this.data 而不调用 this.setData 是无法改变页面的状态的,还会造成数据不一致


      你说的这个,如果不setData的话,前端的UI的界面不会更新数据。所以必须setData才行。

      2018-12-21
      回复
    • 放空
      放空
      2018-12-24回复ღ᭄Fall In Dream🍃࿐

      这些都是在官方的文档中找到的、

      我猜测引起的原因可能是 你setData之后,页面更新,然后执行的回调。

      你这个页面更新如果用个几十秒 回调自然就要延迟了。

      2018-12-24
      回复
    • ღ᭄Fall In Dream🍃࿐
      ღ᭄Fall In Dream🍃࿐
      2018-12-24回复放空

      1.回调的部分,只是数据加载的动画函数。我试过把动画关了,还是一样的。

      2.setData前的时间戳与setData后的时间戳,不就是应该这么计算吗?如果这两个时间戳差值较大,那就是setData的问题咯。

      2018-12-24
      回复
    • 放空
      放空
      2018-12-24回复ღ᭄Fall In Dream🍃࿐

      两个时间戳 中间有个数据改变-》引起视图渲染的时间。

      比如你setData 设置了 userList、 page、 page_total; 这3个数据绑定了页面的某些组件什么的吧

      改变了这3个值 这些组件要重新渲染 这个需要时间。

      (ps:不过得渲染多大的数据才会耗时达到秒 甚至 几十秒的程度呢? 我只是提供一个思路,不是很确定引起你问题的原因,你可以测试一下是不是渲染引起的)


      2018-12-24
      回复
    • 放空
      放空
      2018-12-24回复ღ᭄Fall In Dream🍃࿐

      刚看了一下你的userList  里面有个属性是 pickurl1, 猜想是否是因为你的页面有图片的渲染而引起网络请求耗时较大,如果你的页面有类似下方的代码,试着注释掉测测:

      <view wx:for="userList">

      <text>姓名:{{item.nickname}}</text>

      <image src="{{item.pickurl1}}" />

      </view>

      2018-12-24
      回复
    查看更多(3)