vue中结合vue-cesium路由跳转使内存和gpu增加问题解决

vue-cesium路由跳转结果内存和gpu一直增大

开始项目中打算每个页面都有一个单独的地球实例,但是随着vue-router页面的跳转,地球的destroy也没有把内存释放,gpu也越来越高,苦思想了很久,也没有出啥。后来查资料说是cesium的内存机制有问题,所以没办法只有多个页面共享一个地球了。好吧废话不多说开始代码。

Home页面放置

<div id="viewerCon">
        <cesium-viewer></cesium-viewer>
</div>

其中cesium-viewer是注册的地球组件,id为viewerCon的div作为存放组件的容器。

其他页面放置

<div class="map-c" id="xhMainCon" ref="parent"></div>

<script>
export default {
  name: "xhmain",
  data() {
    return {
    }
  },
  mounted() {
    this.setCesium();
  },
  created() {},
  beforeDestroy() {
    this.destoryCesium();
  },
  methods: {
    setCesium() {
      //获取到3d的盒子
      var cesium= document.getElementById("cesium");
      var viewerCon = document.getElementById("viewerCon");
      //3d在页面中的样式,可根据自己的需求进行调整
      cesium.style.display = "block";
      viewerCon.removeChild(cesium);
      // //在本页面中的制定位置进行挂载
      document.getElementById("xhMainCon").appendChild(cesium);
    },
    destoryCesium() {
      var parent = this.$refs.parent;
      var cesium= parent.firstChild;

      //隐藏
      cesium.style.display = "none";
      //从当前页面中移除
      parent.removeChild(cesium);
      //重新挂载回body
      var viewerCon = document.getElementById("viewerCon");
      viewerCon.appendChild(cesium);
    }
  }
};
</script>

这样每个页面都可以存放一个地球了,而且不会随着路由跳转而使内存和gpu提升。
还有一个问题是,开始我在钩子beforeDestroy中用的是
var parent = document.getElementById(“xhMainCon”)
而不是 var parent = this.$refs.parent,
但是怎么都获取不到元素,后来打印了document才发现打印的document是页面即将跳转的document,获取的id在打印的document中不存在。
在解决问题的过程中,还是要多打印当前所要操作的元素,这样才不会浪费时间。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值