首页 > 系统相关 >关于echarts+vue频繁刷新的造成的内存增长问题

关于echarts+vue频繁刷新的造成的内存增长问题

时间:2024-01-15 10:12:32浏览次数:29  
标签:Eechart vue setOption chart 内存 fullOption echarts

前言

关于解决echarts+ws多次数据刷新渲染,内存增长溢出的尝试。
记录一下,便于下次使用有参考

方法

  1. 关闭echarts动画
  2. tooltip的动画设置为false。(echarts动画会缓存,通过快照可以看出)
 tooltip: {
          axisPointer: {
            animation: false, //很重要!
          },
        },
  1. 单独设置频繁刷新的echarts dom,不使用组件式的封装
  2. echarts实例不挂载在data上。可以如下设置
 data() {
    return {};
  },
  created() {
    this.Eechart = null;
  },
  1. 数据更新使用
this.Eechart.setOption(fullOption, { replaceMerge: ["series"] });

使用其他方式都会造成内存的增长(通过跑f12性能查看),比如以下

1. this.Eechart.setOption(fullOption, true);
2. this.Eechart.setOption(fullOption);
3. this.Eechart.clear();
   this.Eechart.setOption(fullOption, true);
4.this.Eechart.clear(); this.Eechart.dispose();this.Eechart=null 重新init

  1. 卸载挂载,(事实证明还是会增长,后续有说明)
  if (!this.chart) {
     this.chart = echarts.init(this.$el, { renderer: "svg" });
   }
 this.$once("hook:beforeDestroy", () => {
     // //document.getElementById("mainEChart").removeAttribute('_echarts_instance_');
     this.Eechart.off("click");
     this.Eechart.clear();
     this.Eechart.dispose();

     console.log("是否清理?", this.Eechart.isDisposed);

     this.Eechart = null;
     window.removeEventListener("resize", this.handleWindowResize);
   });
  1. finished 与 click 同时使用,会影响click。有个粗暴方法不建议使用。
    当时为了解决100ms-200ms刷新,大量数据渲染坐标消失问题的解决方法。事实证明没用,渲染太快了,当时很多计算放在前端循环(数据量多的时候有100ms+的计算时长)。只有降低频率去解决。尝试过web worker,效果不是很理想,放弃。
      每次更新挂载,下一次更新卸载
       this.chart.on("finished", () => {
       });
      let cache = this.chart._$handlers.finished;
     cache.splice(0, cache.length - 1);
  1. 切换路由时,回到页面,会有内存增长影响
    见6,卸载与挂载。去issue搜了 https://github.com/apache/echarts/issues/4105 没看到解决方法。如果有,欢迎留言评论。
解决方式就是给路由加上keep-active

最后

经过以上,测试跑了性能,时间轴也基本全灰,都能回收。内存稳定在一个范围里。
image

问题

如果有更好的解决方式,欢迎大佬们留言。
因为是三维曲面图,需要点击功能,分级颜色。根据数据生成图形。没找到echarts外更好选择。如果有其他的方式或者库之类,请佬务必留言!

标签:Eechart,vue,setOption,chart,内存,fullOption,echarts
From: https://www.cnblogs.com/yun10011/p/17964770

相关文章

  • 数组 数组的内存 面向对象 this
    静态初始化全写:数据类型[]数组名=new数据类型{值};简写:数据类型[]数组名={值};动态初始化数据类型[]数组名=new数据类型[数组长度];数组不赋值时会默认初始化一个值整数:0小数:0.0字符:"/uoooo"(显示出来就是一个空格)布尔:FALSE引用数据类型:null数组的内存堆内存......
  • 【Vue】前端直接显示MySQL Datatime时间,显示为英文如何处理
    问题如图想让时间显示为自己想要的格式,可以自己编写一个函数constformatDate=(timestamp)=>{constdate=newDate(timestamp);constyear=date.getFullYear();constmonth=String(date.getMonth()+1).padStart(2,'0');constday=String(date.getDate......
  • 内存四区
    1.代码区:存放函数体的二进制代码,由操作系统进行管理的!2.全局区:存放全局变量和静态变量以及常量3.栈区:由编译器自动分配释放,存放函数的参数值,局部变量等由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收存放的数据:函数参数局部变量4.堆区:由程序员分配和释放,若程......
  • 深入理解Oracle SGA和共享内存段
    在Oracle数据库中,SGA(SystemGlobalArea)是一个重要的内存区域,用于存储整个数据库实例共享的信息和数据。SGA由多个不同的区域组成,例如DatabaseBufferCache、SharedPool等。这些区域在操作系统中使用共享内存段来存储,而其中的一个关键参数是shmmax。SGA和共享内存段的关系SGA中的......
  • 【小记】BITMAP To BMP 调用 GetDIBits 引发栈内存损坏问题
    BITMAPbitmap;if(!GetObject(hBitmap,sizeof(bitmap),&bitmap)){//外部传入hBitmapreturnfalse;}//创建位图信息头BITMAPINFObitInfo;BITMAPINFOHEADER&bi=bitInfo.bmiHeader;bi.biWidth=bitmap.bmWidth;bi.biHeight=bitmap.bmHeight;bi.biPlane......
  • 基于SpringBoot+Vue的OA办公系统设计实现(源码+lw+部署文档+讲解等)
    (文章目录)前言:heartpulse:博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌:heartpulse:......
  • Vue 3 + TypeScript + Vite + Element-Plus + Router + Axios + Pinia项目搭建(内含完
    Vue3+TypeScript+Vite+Element-Plus+Router+Axios+Pinia项目搭建(内含完整架构)安装Vue3+ts+vitenpminitvite@latest选择y,新建项目名称,选择vue,选择vue-ts下载完成后执行以下命令行cd新建的项目名称npminpmrundev安装Element-Plusnpminstallelement-plus-......
  • Day49 创建对象内存分析
    创建对象内存分析Pet.javapackagecom.oop.demo03;publicclassPet{publicStringname;publicintage;//无参构造publicvoidshout(){System.out.println("叫了一声");}}Application.javapackagecom.oop;importcom.oop.demo......
  • 安卓之内存管理,强制回收机制以及应对措施分析
    ​文章摘要        安卓操作系统作为全球最流行的移动操作系统之一,其强大的功能和灵活性深受开发者与用户的喜爱。然而,随着应用的复杂性和用户需求的增长,应用的内存管理变得尤为重要。在这其中,安卓的强制回收机制起着至关重要的作用。本文将深入探讨安卓系统中的内存管......
  • Vue3环境安装
    curl-o-https://raw.githubusercontent.com/nvm-sh/nvm/master/install.sh|bashbashinstall.shsource/home/cc/.bashrcnvm--version#安装指定的版本nvminstallv12.22.12#安装当前稳定的LTS版本nvminstall--lts#切换版本nvmusev20.11.0#查看本地已安装的Nod......