ol_m_lo
2021-07-29 11:40
采纳率: 77.8%
浏览 92
已结题

socket消息渲染页面卡死-前端vue框架

我不是专业前端,能给出具体代码的建议吗?先谢过了!
现在的场景是:web端-vue-前端需要实时的展示刷新一个结果数据,这个数据普遍在2000条左右。后端使用socket在实时的推送,因为需要消息的实时性,所以后端会一直推,速度大概是七八百条/秒。前端需要用什么方法有效的渲染这个数据,或者后端需要怎么的改进。(这里有一个实际的问题:数据需要实时性,后端这边一直获取最新信息然后推送给前端。)

前端局部展示代码:

// 渲染部分
<div v-for="item in listinfo">
<el-tag effect="plain" type="info" style="display: block;border: none;font-size: 14px" >
{{item}}
</el-tag>
</div>
<div v-for="item in listinfo1">
<el-tag effect="plain" type="info" style="display: block;border: none;font-size: 14px" >
{{item}}
</el-tag>
</div>


//参数部分
export default {
name: "case",
components: {},
data() {
listinfo: [],
listinfo1: [],
}
}


// socket部分
connectsocket(){
let url = 'ws://.....';
this.ws = new websocket(url)
this.ws.onmessage = function(e){
var text = JSON.parse(e.data)
if (typeof text.message==="string"){
if(text.message==="start"){
that.getList()
that.getTreeselect()
that.exeAbel = true
that.readOnly = true
}else if(text.message==='end'){
that.result()
that.getList()
that.getTreeselect()
that.exeAbel = false
that.readOnly = false
}else if(text.msg_type==='run'){
that.infolist.push(text.message)
}else if(text.msg_type==='run1'){
that.infolist1.push(text.message)
}
}else if(typeof text.message==="object"){
//这个消息数量很少,就不写了
}
}
}
  • 写回答
  • 好问题 提建议
  • 追加酬金
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • 咕泡-三木 2021-07-29 15:01
    已采纳

    关键词:缓冲

    思路:

    1. 后端来的数据实时放计入数组A
    2. 每隔1~2秒,从数组A中取出前10条数据渲染到页面上

    这样,无论后端的频率有多高,数据量有大, 页面的渲染速度都是稳定可控的

    如有帮助还请及时采纳,追问可关注公众号:测试开发研习社

    评论
    解决 无用
    打赏 举报
查看更多回答(2条)

相关推荐 更多相似问题