Cesium:OSGB倾斜摄影模型加载卡顿优化
基于Vue2+Cesium.js搭建的三维地理数据可视化项目,遇到的问题为:Cesium加载OSGB倾斜摄影模型时,tileset.json文件的并发请求高,堆内存总大小严重飙升(约4G)、Google Chrome占用内存高(约3~4个G)、页面卡顿极其严重。更令人崩溃的是,未等页面全部渲染完毕,Google Chrome浏览器就已经崩溃,更不要说通过鼠标进行页面交互了。以下给出笔者对于此种问题的解决方案。
Vue数据劫持问题与优化策略
Vue框架利用Object.defineProperty()这个方法来实现了数据的监听和修改,也达到了很好的模块间解耦效果。但是,这种特性用在整合Cesium.js框架,在地图组件初始化时劫持Cesium.Viewer对象,在页面渲染和三维场景交互期间,所表现出现的性能似乎并不是十分友好,在三维场景中数据量较大的情况下,很容易引起页面卡顿、甚至崩溃(堆内存有飙升到好几个G的)。
假如Ceisum球初始化之后将viewer与vue中的data或者computed进行了绑定,那么就会导致vue对viewer进行了数据劫持。数据劫持的情况表现在viewer 或者viewer.scene 为 observer对象,应当尽量避免这种情况。
一个解决方案就是将Cesium.Viewer对象挂载到window对象上,这样就可以阻断Vue的数据劫持。
iframe并行加载三维场景
为避免Cesium.Viewer重复初始化,通常的做法是只提供一个地图组件,让Cesium.Viewer对象只创建一次。即:在WebApp的整个运行