1

我目前正在开发一个 GIS 项目,它必须是跨浏览器、移动设备、多平台和无所不能的。Cesium 在没有 WebGL 的情况下无法工作,在一些较旧的浏览器和其他小异常上,但我必须全部捕获。当无法选择 Cesium 时,我决定切换到 OpenLayers,OL 在几乎所有方面都运行良好。至于现在,我有一个新的 Cesium.Viewer 的尝试捕获,并且捕获启动 OpenLayers,直到最近,当我开始收到 Cesium“内存不足”错误时,它工作得非常好。

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

4

1 回答 1

1

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

但是,当然,如果浏览器接近内存不足,任何在浏览器上分配内存的调用都可能会失败。遗憾的是,在 JavaScript 中似乎没有太多警告。Cesium 已经被很好地清理了,在渲染时不分配内存(重新使用带有result参数的临时变量等),但是像放大高分辨率地形这样的一些操作必然会分配一些内存。添加实体和新的图形基元和东西将分配内存。您可能希望在向视图中添加新对象时尝试/捕获。

另请查看viewerPerformanceWatchdogMixin

于 2015-05-19T01:55:16.893 回答