赞
踩
在介绍如何优化之前,我们先要了解一下cesium需要优化的几种情况(目前我遇到的一些情况)
这三种是我目前遇到的问题,后面有其他的问题我再更新进来,欢迎大家一起探讨
针对第一个问题,这个就比较明显了。
一般是老电脑没有独立显卡,使用核心显卡来加载,性能不够造成的,这个直接换电脑就行!(我之前公司的电脑就不太行,后来直接使用自己的笔记本来开发了)
还有一种情况,就是我们的电脑有独立显卡,配置还不错,但还是有些卡。这个可能是由于我们没有配置好电脑显卡设置造成的。我们需要让浏览器使用独显来渲染webGL数据。
这里我以我现在用的电脑为例:
在电脑右下角有个英伟达显卡驱动图标
右击打开驱动设置
选择管理3D设置
这里我们可以全局设置所有的应用都使用独立显卡来渲染(费电),也可指定应用来使用独显,这里我们指定程序
我们将浏览器添加到程序设置中(如果你在下拉菜单中没有找到),让独立显卡来管理(优先使用独立显卡)
加入管理后,还可以设置参数来调优,这里我就不介绍了,有兴趣可以百度看看
在vue项目中使用cesium时,我们习惯让vue来管理对象,所以就将cesium交由vue管理。
vue的数据双向绑定导致Cesium相关的对象一直被监听。
一般Vue项目内存泄露常发生在某些地方我们引用的第三方库自己创建和维护了DOM,所以Vue在页面卸载时虽然这些对象的引用都释放了,但是因为这些对象自身关联了DOM所以内存无法释放。
解决方法也很简单,我们把cesium对象从vue中提取出来。
// cesium交给window对象管理
window.viewer = new Cesium.Viewer('cesiumContainer', {});
// 数据定义在外面
let dataSource = null
我们在加载3dtiles倾斜摄影模型的时候,如果使用默认的配置
new Cesium.Cesium3DTileset({
url: '../3dtiles/chuangzhuang/tileset.json',
modelMatrix: Cesium.Matrix4.fromArray([1, 5.551115123125783e-16, 5.898416033378595e-9, 0, -6.106226635438361e-16, 1, -1.1355608731111744e-8, 0, -5.898416061134171e-9, 1.1355608731111744e-8, 0.9999999999999999, 0, 9.912469893228263, -19.08345020748675, -14.613607150502503, 1]),
});
可能会随着数据的加载,页面变得越来越卡,内存占用越来越高
这个时候我们需要修改一下Cesium3DTileset的配置,来优化加载,提升流畅度,配置如下
new Cesium.Cesium3DTileset({
url:tilesUrl + '/3dtiles/chuangzhuang/tileset.json',
modelMatrix: Cesium.Matrix4.fromArray([1,5.551115123125783e-16,5.898416033378595e-9,0,-6.106226635438361e-16,1,-1.1355608731111744e-8,0,-5.898416061134171e-9,1.1355608731111744e-8,0.9999999999999999,0,9.912469893228263,-19.08345020748675,-14.613607150502503,1]),
skipLevelOfDetail: true,
baseScreenSpaceError: 1024,
maximumScreenSpaceError: 256, // 数值加大,能让最终成像变模糊
skipScreenSpaceErrorFactor: 16,
skipLevels: 1,
immediatelyLoadDesiredLevelOfDetail: false,
loadSiblings: true, // 如果为true则不会在已加载完概况房屋后,自动从中心开始超清化房屋
cullWithChildrenBounds: true,
cullRequestsWhileMoving: true,
cullRequestsWhileMovingMultiplier: 10, // 值越小能够更快的剔除
preloadWhenHidden: true,
preferLeaves: true,
maximumMemoryUsage: 128, // 内存分配变小有利于倾斜摄影数据回收,提升性能体验
progressiveResolutionHeightFraction: 0.5, // 数值偏于0能够让初始加载变得模糊
dynamicScreenSpaceErrorDensity: 0.1, // 数值加大,能让周边加载变快
dynamicScreenSpaceErrorFactor: 1,
dynamicScreenSpaceError: true // 有了这个后,会在真正的全屏加载完之后才清晰化房屋
});
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。