1、背景:
项目使用的语言是vue+iview,因为用到了3D,所以找公司买了3d地图的产品,但是问题随之而来。把我们项目需要用到的3d地图封装成一个组件叫3dMap.vue,方便各个页面调用,vue的工作机制是在离开当前页面的时候把当前页面进行销毁,但是由于Cesium的特性,他并没有没销毁,每当访问一次,就会重新new一个Cesium.
const Viewer = new Cesium.Viewer("newID", {
navigation: this.navigation,
infoBox: this.infoBox
});
查看计算机进程会发现,chrome浏览器会同事跑6个以上进程,其中一个是Cesium的,它所占用的内存会随着访问次数的增加不断上涨。
2、解决思路:
既然每访问一次3dMap.vue就会new一个Cesium,那能不能就创造一个全局的Cesium,让他一直存在,通过显示与隐藏去控制在每个单页面应用中的显示呢。
3、动手:
·3.1首先创建一个全局的Cesium,起名global3D.vue,这个只是用来初始化
<script>
import Cesium from "Cesium";
import aa from '../../static/serverconfig.json'
import Vue from 'vue';
//创建一个div,用来做3d的盒子
const _div = document.createElement("div"