Кэширование в CesiumJS строится как многоуровневая система, в которой участвуют браузер, транспортный слой загрузки ресурсов, внутренние кэши текстур и тайлов, а также специализированные механизмы для 3D Tiles, изображений, террейна и данных с Cesium ion. Такая архитектура позволяет минимизировать сетевые запросы, уменьшить задержки при навигации по сцене и обеспечить стабильную производительность при работе с большими объёмами геопространственных данных.
В CesiumJS кэширование не является единым механизмом. Оно распределено по нескольким уровням:
ResourceCache)ImageryLayer и
TerrainProviderКаждый уровень решает свою задачу и оптимизирован под конкретный тип данных.
CesiumJS активно использует стандартные механизмы HTTP-кэширования.
При загрузке ресурсов через Resource и
RequestScheduler учитываются:
Cache-ControlETagExpiresLast-ModifiedЕсли сервер корректно настроен, повторные запросы могут быть полностью устранены на уровне браузера.
Особенность CesiumJS заключается в том, что библиотека не препятствует работе браузерного кэша, а наоборот — старается максимально его использовать. При этом можно управлять поведением запросов через параметры:
request.headersrequest.throttlerequest.priorityЭто позволяет тонко регулировать баланс между актуальностью данных и скоростью загрузки сцены.
Класс ResourceCache отвечает за хранение загруженных
ресурсов в памяти JavaScript. Он используется для:
Кэш реализован как LRU-структура (Least Recently Used), что означает автоматическое удаление наименее используемых элементов при превышении лимита памяти.
Ключевые особенности:
Важный аспект: ResourceCache работает независимо от
HTTP-кэша и может содержать уже «устаревшие» данные, если не настроено
принудительное обновление.
Слой изображений (например, Bing Maps, OpenStreetMap, WMS/WMTS) использует многоуровневый тайловый кэш.
ImageryProviderLRU-подобная модель позволяет удерживать в памяти наиболее актуальные тайлы вокруг текущей камеры.
Геометрия поверхности (terrain) кэшируется аналогично изображениям, но с дополнительной сложностью:
Terrain-кэш оптимизирован под повторное использование геометрии при изменении угла обзора.
Особенности:
3D Tiles — наиболее сложный источник данных в CesiumJS, и его кэширование критично для производительности.
Ключевой механизм — Tile Cache + Tile Replacement Policy, который определяет:
Используется стратегия, основанная на:
RequestScheduler не является кэшем напрямую, но влияет
на эффективность кэширования.
Он контролирует:
Это снижает вероятность повторных загрузок одних и тех же ресурсов при высокой нагрузке.
На уровне графического процессора CesiumJS хранит:
Особенности:
GPU-кэш тесно связан с ResourceCache, но работает на
другом уровне памяти.
Кэширование в CesiumJS не является полностью статичным. Существуют механизмы инвалидирования:
ImageryProviderdestroy() у слоёвОсобое внимание уделяется тому, что изменение параметров провайдера не всегда автоматически очищает старые данные, поэтому возможны «смешанные» состояния сцены при динамической конфигурации.
Разные провайдеры реализуют различные стратегии кэширования:
Чем более регулярна структура тайлов, тем эффективнее работает кэш.
CesiumJS учитывает ограниченность памяти браузера:
Внутренние алгоритмы стараются сохранить баланс между:
При перемещении камеры кэш обеспечивает:
Эта модель делает возможной плавную навигацию даже в сценах с миллионами тайлов.
На поведение кэша влияют:
maximumScreenSpaceErrormaximumMemoryUsagerequestRenderModepreloadSiblingstileCacheSizeИзменение этих параметров напрямую влияет на:
При работе с кастомными ImageryProvider и
DataSource необходимо учитывать:
Неправильная реализация приводит к частым повторным загрузкам и деградации производительности.
Эффективная работа с кэшированием достигается за счёт:
RequestSchedulerПри больших сценах критично избегать динамических URL без версионирования, так как это полностью ломает эффективность кэша на всех уровнях.