2015-05-18 1 views
1

В настоящее время я работаю над шляпой проекта ГИС, которая должна быть кросс-браузером, мобильным, мультиплатформенным и всемогущим. Цезий не работает без WebGL, в некоторых старых браузерах и других незначительных исключениях, но я должен их поймать. Я решил перейти к OpenLayers, когда Цезий не может быть вариантом, OL работает хорошо на почти все. На данный момент у меня есть попытка поймать новый Cesium.Viewer, и уловка начинается с OpenLayers, которая до этого момента отлично работала, когда я начал получать ошибку цезия «из памяти».Правильная попытка создания цезия, обнаружения ошибок, совместимости кросс-браузера и ошибок разработчика

Цезиевые документы на ошибках разработчика: никогда не должны быть пойманы; вместо этого вызывающий код должен стремиться не генерировать его. Ну как же обойти это стремление? Есть ли какой-либо надежный способ проверить, будет ли Цезий правильно срабатывать, или мне нужно попробовать поймать каждый метод, который я звоню, чтобы быть уверенным, что он не выйдет из строя?

+0

Вы упомянули, что до недавнего времени он работал очень хорошо. Что изменилось недавно? – emackey

+0

Ничего. Я предполагаю, что память телефона/кеш заполнена. – pogan

ответ

1

Обязательно new Cesium.Viewer(...) должен быть завернут в try/catch, так как он будет кидать Cesium.RuntimeError, если он не может инициализировать WebGL. Кроме того, viewer.scene имеет событие renderError, которое возникает при возникновении ошибки внутри цикла рендеринга (так как обычный/автоматический цикл рендеринга нельзя обернуть в try/catch).

Но, конечно, любой вызов, который выделяет память в браузере, может потенциально потерпеть неудачу, если браузер близок к нехватке памяти. К сожалению, в JavaScript не так много предупреждений об этом. Цезий был хорошо очищен, чтобы не выделять память при рендеринге (повторное использование переменных нуля с параметрами result и т. Д.), Но некоторые действия, такие как увеличение масштаба изображения на высоком разрезе, обязательно выделяют некоторую память. Добавление сущностей и новых графических примитивов и прочее будет выделять память. Вероятно, вы хотите попробовать/поймать, добавив новые объекты в представление.

Также взгляните на viewerPerformanceWatchdogMixin.