Cesium创建、错误捕获、跨浏览器兼容性和开发者错误的正确尝试

Proper try of Cesium creation, error catching, cross browser compatibility and developer errors

我目前正在做一个 GIS 项目,它必须是跨浏览器、移动、多平台和无所不能的。 没有 WebGL,Cesium 在一些较旧的浏览器和其他小的例外情况下无法工作,但我必须抓住它们。 当 Cesium 不是一个选项时,我决定切换到 OpenLayers,OL 在几乎所有方面都能很好地工作。 至于现在,我有一个 try catch for new Cesium.Viewer,并且 catch 启动了 OpenLayers,它工作得很好,直到最近,当我开始收到 Cesium "out of memory" 错误时。

关于开发者错误的 Cesium 文档:永远不应该被捕获;相反,调用代码应该尽量不生成它。 那么如何实现这一目标呢? 有没有可靠的方法来检查 Cesium 是否会正常启动,或者我是否必须尝试捕获我调用的每一个方法以确保它不会崩溃?

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

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

也看看viewerPerformanceWatchdogMixin