echarts 內存泄漏


最近使用vue + Echarts 實現vue項目的數據可視化功能的時候,在ios環境下,點擊列表頁進入詳情頁幾次就白屏了。
感覺白屏的原因是:echarts頻繁初始化畫圖時候有內存泄漏,吃掉了所有內存,就白屏畫不出來了。

然后就在chrome測試:

 
 

點擊過程中一直增加,點擊停止后,沒有回落到平衡狀態。

原因:
生成的echarts實例對象很大,占用內存過多。
echarts 里 zrender 用的canvas。

 

 
 

查找過程中發現:
1.不要把chart實例賦值在this上。(this對象一直存在不會被回收)
2.新版本echarts不支持對一個dom多次創建實例。
3.析構掉生成的echarts對象。

解決方法:

 //-dom 不存在時不畫
     if (!this.$refs.barchart) {
          return
     }
     //- 不要重復初始化
     let Chart = echarts.getInstanceByDom(this.$refs.barchart)
     if (!Chart) {
            Chart = echarts.init(this.$refs.barchart, 'light')
     }
    //-釋放echarts對象
    beforeDestroy () {
        let dcharts = echarts.getInstanceByDom(this.$refs.barchart)
        if (dcharts) {
            echarts.dispose(dcharts)
        }
    },

        //- 發現官網實例上有once hook 比destroy 要好一些
        //- hook:beforeDestroy
        let Chart = echarts.getInstanceByDom(this.$refs.barchart)
        if (!Chart) {
            Chart = echarts.init(this.$refs.barchart, 'light')
            this.$once('hook:beforeDestroy', function () {
                echarts.dispose(Chart)
            })
        }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM