解决Vue+Echarts的手机APP页面内存溢出(页面空白问题)问题

问题背景:

  1. 手机APP页面用了echarts+vue生成图表。如下图所示,假设一开始Tab标签页1下面有三个echarts图表,Tab标签2也有三个echarts图表。
  2. 前几次切换Tba标签页可以正常生成图表,但是当切换多次以后,页面会出现空白的情况,页面也不会报错并且无明显提示。
    真实项目页面涉及保密问题,只能以手画图讲解

产生原因

  1. 最终通过调试窗口发现了问题。
  2. 如图:在这里插入图片描述
  3. 原因就是切换生成echarts时需要用到一部分内存,重复切换Tab标签页,之前生成的图表内存并没有进行清空,一直切换内存也一直叠加,最终导致内存溢出。

解决思路

发现问题后解决思路就有了:

  1. 在生成echarts之前进行判断,dom不存在时就不初始化echarts
  2. 去掉重复初始化echarts,这个主要就是在不需要使用时销毁实例。那么很自然想到官方API,查阅echarts官方API果然发现有这个方法:
    在这里插入图片描述

最终代码

  1. 页面容器:
<template>
  <div class="chart-main">
    <div ref="dom" :style="chartStyle"></div>
  </div>
</template>
  1. 初始化echarts方法:
initChart() {
      //-dom 不存在时不画
      if (!this.$refs.dom) {
          return
      }
      //去掉重复初始化
      this.myChart = echarts.getInstanceByDom(this.$refs.dom);
      if(!this.myChart){
        this.myChart = echarts.init(this.$refs.dom);
        this.$once('hook:beforeDestroy', function () {
          echarts.dispose(this.myChart)
        })
      }
  }
  1. 没修改之前的代码:
initChart() {
      this.myChart = echarts.init(this.$refs.dom);
}

个人水平有限,有不对的地方欢迎大家指正,谢谢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值