在vue中使用echarts,切换频繁时内存泄漏出现白屏


在vue中使用echarts,切换频繁时内存泄漏出现白屏

错误场景:

在 vue 项目中使用了 echarts,在一个页签与另一个页签之间切换多次后,页面卡顿并且 echarts 不能重绘,出现白屏。

原因分析:

echarts 频繁初始化画图时候有内存泄漏,吃掉了所有内存,就白屏画不出来了。

生成的echarts实例对象很大,占用内存过多。 echarts 里 zrender 用的canvas。

解决方法:

来自 https://www.jianshu.com/p/d6d7294b2bf5

  1. 不要把chart实例赋值在this上。(this对象一直存在不会被回收)

  2. 新版本echarts不支持对一个dom多次创建实例。

  3. 析构掉生成的echarts对象。

代码示例:

 1     //-dom 不存在时不画
 2     if (!this.$refs.barchart) {
 3          return
 4     }
 5     //- 不要重复初始化
 6     let Chart = echarts.getInstanceByDom(this.$refs.barchart)
 7     if (!Chart) {
 8           Chart = echarts.init(this.$refs.barchart, 'light')
 9     }
10     //-释放echarts对象
11     beforeDestroy () {
12         let dcharts = echarts.getInstanceByDom(this.$refs.barchart)
13         if (dcharts) {
14             echarts.dispose(dcharts)
15         }
16     }
17 18     //- 发现官网实例上有once hook 比destroy 要好一些
19     //- hook:beforeDestroy
20     let Chart = echarts.getInstanceByDom(this.$refs.barchart)
21     if (!Chart) {
22         Chart = echarts.init(this.$refs.barchart, 'light')
23         this.$once('hook:beforeDestroy', () => {
24             echarts.dispose(Chart)
25         })
26     }

 

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM