在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