正确尝试Cesium创建,错误捕获,跨浏览器兼容性和开发人员错误

时间:2015-05-18 09:02:17

标签: javascript mobile error-handling cross-browser cesium

我目前正在研究一个GIS项目帽子必须是跨浏览器,移动,多平台和无所不能。 如果没有WebGL,在一些较旧的浏览器和其他小的例外情况下,Cesium不起作用,但我必须抓住它们。 当Cesium不能成为一种选择时,我决定转向OpenLayers,OL几乎可以在所有事情上运行良好。 至于现在,我有一个尝试捕获新的Cesium.Viewer,并且捕获启动OpenLayers,直到最近,当我开始使Cesium“内存不足”错误时,它工作得非常好。

关于Developer Error的Cesium文档:永远不应该被抓住;相反,调用代码应该努力不生成它。 那么如何解决这个问题呢? 是否有任何可靠的方法来检查Cesium是否会正常启动,或者我是否必须尝试捕获我呼叫的每一种方法以确保它不会崩溃?

1 个答案:

答案 0 :(得分:1)

当然new Cesium.Viewer(...)应该包含在try / catch中,因为如果它不能初始化WebGL,它将抛出Cesium.RuntimeError。此外,viewer.scene有一个renderError事件,当渲染循环内发生错误时会引发该事件(因为普通/自动渲染循环不能包装在try / catch中)。

但是,当然,如果浏览器接近内存不足,那么在浏览器上分配内存的任何调用都可能会失败。遗憾的是,在JavaScript中似乎没有对此有太多警告。在渲染时(重新使用带有result参数的临时变量等),Cesium已被很好地擦除以分配内存,但是某些操作(如放大高分辨率地形)必然会分配一些内存。添加实体和新的图形基元和东西将分配内存。在向视图添加新对象时,您可能需要try / catch。

另请查看viewerPerformanceWatchdogMixin