一张图解决vue中websocket推送数过多导致页面卡主(思路)

这篇具有很好参考价值的文章主要介绍了一张图解决vue中websocket推送数过多导致页面卡主(思路)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

首先,websocket连接就不过多赘述了,主要讲述连接以后出现的问题,这个问题点就在于渲染,websocket推送在数据量过大时不能一条一条渲染,这样会导致浏览器压力过大而崩溃(卡死),所以主要思路就是将数据缓存在一个数组中,通过定时器定时渲染数据。

一张图解决vue中websocket推送数过多导致页面卡主(思路)

下面是逻辑代码

// data中的数据
data() {
    return {
        time1:3000,
        joblistsCache:[],   //websocket缓存
        joblists: [], //渲染的表格数据
    }
},


// mounted逻辑
mounted() {
    //加载创建一个2秒定时器(time1:2000ms)
     this.time1 = setInterval(() => {
     console.log('++++++','websocket需要装进去的长度',this.joblistsCache.length);
     // 如果websocket需要装进去的长度大于200,那就截取最新的200条以外的所有数据(1、每次只渲染200条   2、joblistsCache数组为缓存数组,并不是实时渲染到的数据)
     if (this.joblistsCache.length > 200) {
         console.log('+++---','添加时删除' + String(this.joblistsCache.length - 200) + '条');
         this.joblists.unshift(...this.joblistsCache.splice(this.joblistsCache.length - (this.joblistsCache.length - 200), (this.joblistsCache.length - 200)))
     }else{
          this.joblists.unshift(...this.joblistsCache)
     }
     // 如果当前页面上的table表格数据超过200条,渲染将可能会卡顿,为了优化,让页面只有200条数据去渲染
     if (this.joblists.length > 200) {
         this.joblists.splice(this.joblists.length - (this.joblists.length - 200), (this.joblists.length - 200))
     }
     console.log('+++===','当前列表长度',this.joblists.length);
     // 每次轮询置空joblistsCache缓存数组,为了取到除了上次获取到数据意外的 最新数据
     this.joblistsCache = []
     }, this.time1)
},

// methods逻辑
methods:{
    //接收后端返回的数据,可以根据需要进行处理
    websocketonmessage(e) {
        if (JSON.parse(e.data).appName !== 'system') {
            // websocket连接后先将所有数据放到缓存中
            this.joblistsCache.unshift(JSON.parse(e.data))
        } else {
            return
       }     
    },
}

//最后不要忘记在beforeDestroy删除定时器哦(很重要)~
beforeDestroy() {
     this.$once('hook:beforeDestroy', () => {
        clearInterval(this.time1);
     })
},

其实在借鉴各位的解决方法时,有一种思路我目前还没有尝试:如果用户就是需求一条一条推送的效果,可以尝试一下不用elementui中的table组件,自己去写一个原生table并拿到websocket推送的数据进行渲染(据说是有这么个办法是可行的哈)。

另外会有人问,那你删除的数据怎么显示呢?我的思路是:

1、做一个后端搜索的接口去查找你想要的那条数据。

2、添加table的 infiniteScroll无限滚动功能(参照大神链接https://yehaocheng520.blog.csdn.net/article/details/120038098)

最后欢迎各位大佬批评指正~文章来源地址https://www.toymoban.com/news/detail-514775.html

到了这里,关于一张图解决vue中websocket推送数过多导致页面卡主(思路)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • vue数据太多导致页面卡顿解决办法

    需求:查询统计表格页面操作卡顿迟缓 原因:查询一天内某个接口每分钟调用量,由于一次返回几百列数据(60*24),并且不做分页,加载过多数据之后,造成页面卡顿,操作延迟 解决办法: 1.和后端沟通进行页面分页加载(本次需求列数过多,不适用) 2.使用umy-ui库中的表

    2024年02月08日
    浏览(33)
  • websocket实时推送统计数据给前端页面

    前提须知:websocket基本使用 业务场景,每秒推送统计数据给前端页面,分别显示前天,昨天,今天的前十名客户数据 @ServerEndpoint(\\\"/smsMCustomerStaTop10Ws\\\") 定义推送数据给到具体的连接标识 以上 onOpen() 方法最终触发的业务方法 smsMonitorService.pushSmsMCustomerStaTop10(); 以上 smsMonitorMapper.findSm

    2024年02月15日
    浏览(49)
  • 财务思维一张图

    系统研读了《肖星的财务思维课》和得到《贾宁·财务思维课》,尝试用一张最简单的图总结财务思维所学到精髓吧。 《肖星的财务思维课》 得到《贾宁·财务思维课》 附: 【清华大学】最好的财务课《商业的财务逻辑》(全7课)肖星教授 【清华大学】最好的财务课《商业

    2024年01月19日
    浏览(59)
  • 【Android】 频繁刷新 RecyclerView导致View 对象引用过多引起的Native 内存占用过大解决办法

    在 RecyclerView 中,如果频繁刷新 RecyclerView,可能会导致 Native 内存中有大量的 TextView 对象,从而导致内存占用过多的问题。以下是一些可能导致该问题的原因和解决方法: 使用 ViewHolder 在 RecyclerView 中,使用 ViewHolder 可以避免频繁创建和销毁 View 对象,从而减少内存占用。可

    2024年02月08日
    浏览(83)
  • 一张图学会python递归函数

    递归函数属于那种“难者不会,会者不难”的事情,回想自己大学时学习递归函数的经历,简直是痛不欲生,代码里没有一行是看不懂的,但就是理解不了它是怎样运行的。 等到自己悟通了原理,就又会觉得这东西太简单了,不明白自己当初为何想不清楚。 对于递归函数,

    2023年04月09日
    浏览(38)
  • 【Linux】一张图了解系统文件

    首先先认识磁盘结构 系统文件分布图 文件查找 文件删除 文件的增删改查都是围绕 inode 来完成的,所以当我们要进行文件删除的时候,只需要通过 inode 来获取到它对应的 block bitmap 和 inode bitmap 数据块容器和保存文件属性的位置置为 0即可 ,如果想要恢复,通过一定的方法设

    2024年02月11日
    浏览(49)
  • 一张图搞懂微服务架构设计

    当前,微服务架构在很多公司都已经落地实施了,下面用一张图简要概述下微服务架构设计中常用组件。不能说已经使用微服务好几年了,结果对微服务架构没有一个整体的认知,一个只懂搬砖的程序员不是一个好码农! 在上图中可以看到,Nginx作为整个架构的流量入口,可以

    2023年04月17日
    浏览(54)
  • elementUI 表格页面层级嵌套过多不及时刷新/错位的解决办法

    1.强制刷新(可能会影响性能) 2.页面重新布局(适用于表格错位等问题) 前提需要绑定: el-form ref=\\\"table\\\"/el-form

    2024年02月15日
    浏览(59)
  • Vue 打包 chunk-vendors.js 文件过大导致页面加载缓慢解决方案

    前言 顾名思义, chunk-vendors.js 是捆绑所有不是自己的模块,而是来自其他方的模块的捆绑包,它们称为第三方模块或供应商模块。 通常,它意味着(仅和)来自项目 /node_modules 目录的所有模块,会将所有 /node_modules 中的第三方包打包到 chunk-vendors.js 中。 将所有的第三方包集

    2024年02月16日
    浏览(58)
  • 一张图快速了解 Istio 的 EnvoyFilter

    EnvoyFilter 提供了一种机制来定制 Istio Pilot 生成的 Envoy 配置。使用 EnvoyFilter 修改某些字段的值,添加特定的过滤器,甚至添加全新的侦听器、集群等等。 这个功能必须谨慎使用,因为不正确的配置可能会破坏整个网格的稳定性。与其他 Istio 网络对象不同,EnvoyFilter 是叠加应

    2024年02月08日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包