2015-05-18 12 views
1

我目前正在開發一個GIS項目帽子,必須跨瀏覽器,移動,多平臺和萬能。 在沒有WebGL的情況下,在一些較舊的瀏覽器和其他小的異常情況下,銫不起作用,但我必須全部抓住它們。 當Cesium不能成爲一種選擇時,我決定轉向OpenLayers,OL幾乎適用於所有的事情。至於現在,我對新的Cesium.Viewer有一個嘗試捕獲,並且catch開始OpenLayers,直到最近,當我開始得到Cesium「內存不足」錯誤時,OpenLayers工作得相當不錯。銫創建,錯誤捕獲,跨瀏覽器兼容性和開發人員錯誤的正確嘗試

開發商Cesium文檔錯誤代表:應該永遠不會被捕獲;而是調用代碼應該努力不生成它。 那麼如何解決這個問題呢? 是否有任何可靠的checknig方法,Cesium是否會正常啓動,還是我必須嘗試捕捉每一個我打電話來確保它不會崩潰的方法?

+0

你提到它「直到最近都工作得很好」。最近變了什麼? – emackey

+0

什麼都沒有。我猜手機內存/緩存已滿。 – pogan

回答

1

當然new Cesium.Viewer(...)應該包裝在try/catch中,因爲如果它不能初始化WebGL,它將拋出Cesium.RuntimeError。此外,viewer.scene有一個renderError事件,當渲染循環內發生錯誤時會引發事件(因爲正常/自動渲染循環無法封裝在try/catch中)。

但是,當然,如果瀏覽器接近內存不足,任何在瀏覽器上分配內存的調用都可能失敗。可悲的是,在JavaScript中似乎沒有太多的警告。銫已被清理得很好,不會在渲染時分配內存(重新使用result參數等臨時變量),但是像放大高分辨率地形等一些操作必須分配一些內存。添加實體和新的圖形基元和東西將分配內存。您可能想要在向視圖添加新對象時嘗試/ catch。

也看看viewerPerformanceWatchdogMixin