收藏
回答

怎么才能不频繁setData?

问题模块
API和组件

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

最后一次编辑于  2017-07-17  (未经腾讯允许,不得转载)
邀请回答
复制链接收藏投诉关注问题回答

14 个回答

  • 刘小晋啦
    刘小晋啦
    2017-07-17

    我连续调用两次setData就提示调用频繁,(lll¬ω¬)

    2017-07-17
    赞同
    回复
  • Man
    Man
    2017-07-17

    你那个只是警告, 没关系的

    2017-07-17
    赞同
    回复
  • LastLeaf
    LastLeaf
    2017-07-18

    感谢反馈。如果需要在短时间内连续调用好几次setData,将它们的数据合并起来就好了。

    2017-07-18
    赞同
    回复
  • Man
    Man
    2017-07-18

    我是要setData频繁修改用户的状态,  数据合起来是先收集起来,间隔一段时间再修改? 但是一次setData数据量也大呀

    2017-07-18
    赞同
    回复
  • LastLeaf
    LastLeaf
    2017-07-18

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

    2017-07-18
    赞同
    回复
  • LastLeaf
    LastLeaf
    2017-07-18

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

    2017-07-18
    赞同
    回复
  • Man
    Man
    2017-07-20

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

    2017-07-20
    赞同
    回复
  • Man
    Man
    2017-07-20


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

    2017-07-20
    赞同
    回复
  • Special
    Special
    2017-07-20

    wxml 对应的代码能发下?

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

    2017-07-20
    赞同
    回复
  • Man
    Man
    2017-07-20

    //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>

    2017-07-20
    赞同
    回复