您现在的位置是:首页 > 技术教程 正文

webSocket推送太快导致前端渲染卡顿问题优化

admin 阅读: 2024-03-31
后台-插件-广告管理-内容页头部广告(手机)

优化思路:
把webSocket接收到的数据用一个数组存起来,达到一定长度再统一渲染,可根据推送数据的速度适当调解数组长度限制,如果一段时间内改数组长度打不要渲染条件,就用定时器之间渲染

data() { return { tempDataWsList: [], // 存放临时ws数据数组 list: [], // 页面上的列表 listCopy: [], // 深拷贝的初始化列表数据,用于统一渲染 } } methods: { ... // websocket接收数据的方法 onMessage(data) { if (data.data) { // 将Json字符串转译 const dataWs = JSON.parse(data.data); // 将转译后的数据推入临时ws数据数组中 this.tempDataWsList.push(dataWs); // 有ws数据就关闭定时器 clearTimeout(this.wsTimeout); // 做缓存渲染,将ws接收到的数据放到数组,满10个就统一渲染 if (this.tempDataWsList.length == 10) { this.handleList(); } else { // 如果最后一个接收后1秒钟内不能满足10个,则直接渲染 this.wsTimeout = setTimeout(() => { this.handleList(); }, 1000); } } }, // 操作数据渲染 handleList() { // 循环临时ws数据数组 this.tempDataWsList.forEach(temp => { // 循环深拷贝的初始化列表数据 this.listCopy.forEach(item => { // 循环判断列表对应ws数据id,修改深拷贝列表上的值 item.pointDetails.forEach(item1 => { if (item1.id == temp.detailsId) { item1.value = temp.realVal; } }); }); }); // 清空临时ws数据数组 this.tempDataWsList = []; // 将修改的列表数据赋值给页面渲染 this.list = this.listCopy; } }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
标签:
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

在线投稿:投稿 站长QQ:1888636

后台-插件-广告管理-内容页尾部广告(手机)
关注我们

扫一扫关注我们,了解最新精彩内容

搜索