前言

关于解决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

最后

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

问题

如果有更好的解决方式,欢迎大佬们留言。

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

关于echarts+vue频繁刷新的造成的内存增长问题的更多相关文章

  1. web:频繁刷新浏览器的页面【小工具】

    [目的] 频繁刷新某一浏览器页面,小测试一下加载性能,或者打开的文件是否及时关闭,会不会导致服务器奔溃 [小工具] 新建txt,输入以下内容,并保存为html的格式,然后在浏览器中打开,则会定时刷新指 ...

  2. C# Winform频繁刷新导致界面闪烁解决方法

    C#Winform频繁刷新导致界面闪烁解决方法 一.通过对窗体和控件使用双缓冲来减少图形闪烁(当绘制图片时出现闪烁时,使用双缓冲) 对于大多数应用程序,.NET Framework 提供的默认双缓冲将 ...

  3. winform频繁刷新导致界面闪烁解决方法

    转自龙心文 原文 winform频繁刷新导致界面闪烁解决方法 一.通过对窗体和控件使用双缓冲来减少图形闪烁(当绘制图片时出现闪烁时,使用双缓冲) 对于大多数应用程序,.NET Framework 提供 ...

  4. URL不变的情况下,最实用的vue刷新当前页面,provide / inject 组合 方式实现vue页面刷新

    原文:https://blog.csdn.net/Dream_xun/article/details/83024487 其他参考:https://blog.csdn.net/liyunkun888/a ...

  5. vue项目刷新页面,使数据不丢失(sessionStorage、localStorage、cookie)

    vue项目刷新页面时,存储在vuex中的数据会丢失,把他们存到stroage中可以保证不丢失.

  6. Vue. 之 刷新当前页面,重载页面数据

    Vue. 之 刷新当前页面,重载页面数据 如下截图,点击左侧不同的数据,右侧根据左侧的KEY动态加载数据.由于右侧是同一个页面,在进行路由跳转后,不会再次刷新数据. 解决方案: 右侧的页面中 scri ...

  7. 前端 vue 等刷新清浏览器缓存的方法

    vue开发过程中发现内存一直往上飙,360时不时的提示下清理内存,测试发现每刷新一次页面内存就增加1%. 清掉浏览器的缓存等各种数据以后内存明显变小,刷新页面导致内存爆表. 这种问题着实不应该存在,记 ...

  8. Windows 7 频繁提示:计算机的内存不足

    最近由于同时打开的程序比较多,Windows 7 频繁提示:计算机的内存不足,如下图: 问题原因: 经过一番尝试,得出一个大概的结论:当虚拟内存空间的大小小于物理内存空间的大小时,一旦程序开的太多,物 ...

  9. 玩转vue前进刷新,后退不刷新and按需刷新

    大白萝卜小课堂开讲了!带你玩转vue前进后退按需刷新! 用vue做后台管理项目,特别是有列表页.列表数据详情页.列表数据修改页功能的码友们,几乎都被vue前进后退都刷新的逻辑坑过,本萝卜更是! 萝卜的 ...

  10. VUE页面刷新问题

    1). location方式 location.reload() 缺点:刷新页面,卡白 2). router方式 this.$router.go(0) 缺点:同一问题,比一好点 3). provide ...

随机推荐

  1. 2023-10-14:用go语言,给定 pushed 和 popped 两个序列,每个序列中的 值都不重复, 只有当它们可能是在最初空栈上进行的推入 push 和弹出 pop 操作序列的结果时, 返回

    2023-10-14:用go语言,给定 pushed 和 popped 两个序列,每个序列中的 值都不重复, 只有当它们可能是在最初空栈上进行的推入 push 和弹出 pop 操作序列的结果时, 返回 ...

  2. [ABC212E] Safety Journey 题解

    Safety Journey 题目大意 给定一张缺少了 \(m\) 条边的 \(n\) 个点的完全图和一个正整数 \(k\),你需要求出满足以下条件的序列 \(A\) 的数量: \(A\) 的长度为 ...

  3. 从零用VitePress搭建博客教程(2) –VitePress默认首页和头部导航、左侧导航配置

    2. 从零用VitePress搭建博客教程(2) –VitePress默认首页和头部导航.左侧导航配置 接上一节: 从零用VitePress搭建博客教程(1) – VitePress的安装和运行 四. ...

  4. 两台实体机器4个虚拟机节点的Hadoop集群搭建(Ubuntu版)

    安装Ubuntu Linux元信息 两台机器,每台机器两台Ubuntu Ubuntu版本:ubuntu-22.04.3-desktop-amd64.iso 处理器数量2,每个处理器的核心数量2,总处理 ...

  5. AGC044C Strange Dance 题解

    在2020年A卷省选day2t2有类似建立trie的技巧. 题目链接 显然是建一棵三叉trie树,代表0/1/2 对这棵trie树,我们需要支持子树交换和全局加1 考虑第一个操作怎么做?直接打个懒标记 ...

  6. JavaScript用策略模式消除if else 和 switch

    js程序中最常用的if else循环,如果分枝很多的的情况下难免使写出的程序又臭又长,但是根据需求又必须将这些分支处理,此时稍有经验的程序员可能会想到用switch case优化但是只是仅仅做到利于阅 ...

  7. 手记系列之七 ----- 分享Linux使用经验

    前言 本篇文章主要介绍的关于本人在使用Linux记录笔记的一些使用方法和经验,温馨提示,本文有点长,约1.7w字,几十张图片,建议收藏查看. 一.Linux基础使用 1,服务器查看及时日志 tail ...

  8. 文心一言 VS 讯飞星火 VS chatgpt (130)-- 算法导论11.2 2题

    二.用go语言,对于一个用链接法解决冲突的散列表,说明将关键字 5,28,19,15,20,33,12,17,10 插入到该表中的过程.设该表中有 9 个槽位,并设其散列函数为 h(k)=k mod ...

  9. vue 项目中遇到的问题及解决方案

    问题:从码云上提前代码时npm run dev 报错 解决方法 在目录外层新建一个postcss.config.js 放入以下代码 module.exports = {       plugins:  ...

  10. 16个值得推荐的.NET ORM框架(含使用情况统计的投票,欢迎参与)

    什么是ORM? ORM 是 Object Relational Mapping 的缩写,译为"对象关系映射",是一种程序设计技术,用于实现面向对象编程语言里不同类型系统的数据之间的 ...