收藏
回答

setInterval导致webSocket数据延迟

同一个页面在不加setInterval定时器的时候,webSocket收到服务器的数据,马上显示并且是正常的;

加上setInterval,每10毫秒执行一次,webSocket收到的数据会延迟,随着时间的推移 延迟越大,可以排查是服务器发送延迟,应该是阻滞在客户端了,难道跟setInterval有冲突吗?

如果把服务器关掉,小程序会很快把没有显示的数据一个一个显示完!说明小程序是收到数据的!


setInterval和webSocket不能兼容吗???

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

2 个回答

  • HS
    HS
    2018-05-30

    你的代码大致是怎么写的呢,是什么需求要加那么频繁的 setInterval 呢

    2018-05-30
    赞同 1
    回复 3
    • andy
      andy
      2018-05-30

      setInterval 是独立的跑秒,从10秒循环到0秒,

      如果收到webSocket接收的新数据,把跑秒的归10,重新跑到0。

      2018-05-30
      回复
    • HS
      HS
      2018-05-30回复andy

      要注意一下性能问题哦

      2018-05-30
      回复
    • andy
      andy
      2018-05-30回复HS

      真的啊,我把10毫秒修改成100毫秒,就没有问题了!谢谢你的意见

      2018-05-30
      回复
  • andy
    andy
    2018-05-30

    代码:

    onload里面:setInterval(that.clockupdate2,10);


    clockupdate2:function(){

    var that = this;

    if (app.globalData.websocketopen == false) {

    return;

    }

    var m_nums = that.data.m_nums;

    var s_nums = that.data.s_nums;

    if (m_nums == 0 && s_nums == 0) {

    //return;

    }

    if (s_nums == 0) {

    s_nums = 99;

    if (m_nums == 0) {

    m_nums = 9;

    } else {

    m_nums--;

    }

    } else {

    s_nums--;

    }

    var m_nums_str = m_nums;

    var s_nums_str = s_nums;

    if (m_nums < 10) {

    m_nums_str = '0' + m_nums;

    }

    if (s_nums < 10) {

    s_nums_str = '0' + s_nums;

    }


    that.setData({

    m_nums_str: m_nums_str,

    s_nums_str: s_nums_str,

    m_nums: m_nums,

    s_nums: s_nums

    });

    }


    然后wensocket收到信息:

    that.setData({ m_nums: 9, s_nums: 99 });


    就这些关键代码


    2018-05-30
    赞同
    回复