html52.com
我爱小程序-开发者交流社区

怎么才能不频繁setData?

问题模块
API和组件

我这边用户列表是服务器实时刷新的, 用户列表高峰期有2K人, 如果我要改变某个用户的状态,需要调用下setData, 这样的话会频繁调用setData ,内存会狂涨~     如果我要操作用户列表,是不是只能放到Page 外面才可以~      还是起个时钟,比如5分钟同步一次?

网友回复

Special:

多谢反馈,是我们的问题,但不影响线上用户的体验。


在打开 Android 性能窗口后,我们会记录 setData 的数据,缓存在内存中,直到用户点击「导出 Trace」数据到开发者工具上才会清空,如果 setData 数据频繁 + 数据量较大的情况下,内存缓存的数据会越来越多。下一个版本会去掉记录 setData 的具体数据,只记录具体大小。


关闭 Android 性能窗口后,不会记录这些内容,所以并不影响线上用户的体验。

Man:

好的,谢谢,有了结果麻烦您告诉我下~

Special:

没有,在分析,怀疑是某处内存泄露

Man:

wxml 就上面一句话, 我代码有问题吗?

Man:

//index.js

//获取应用实例

var app = getApp();

var theUserList = new Array();

Page({

  data: {

    g_userlist: {}

  },

  //事件处理函数

  bindViewTap: function () {

    wx.navigateTo({

      url: '../logs/logs'

    })

  },

  onLoad: function () {

    var that = this;

    for (var i = 0; i < 1000; i++) {

      var tmpUser = {};

      tmpUser.id = i;

      tmpUser.name = 'XX' + i;

      tmpUser.sex = '男';

      theUserList.push(tmpUser);

    }

  },


  onShow: function () {

    var that = this;

    var timer = setInterval(function(){

      that.setData({

        g_userlist: theUserList

      });

    },1000);

  }

})




wxml:

<view class="classname" wx:for="{{g_userlist}}">{{item.name}}</view>

Special:

wxml 对应的代码能发下?

另外 js 的代码发一个文字版本吧。

Man:

修改data里的值的时候,真机上内存会一直涨。   要怎么释放掉吗?修改data里的值的时候,
修改data里的值的时候,真机上内存会一直涨。   要怎么释放掉吗?

Man:

我这边现在一分钟调用一次setData, 调用一次内存涨一次....

LastLeaf:

当然,如果能少setData一些数据就少set一些比较好。但如果需要set的数据总量一样的话,分成几次做setData的开销肯定比做一次setData的开销大得多。

LastLeaf:

对,就是这样,也不用收集很久的。一次数据量大也没关系,setData的基础开销比较大,这种数据合并是很有效的。

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

真正的个人免签约支付接口

云免签H5支付