В CesiumJS система ограничения частоты запросов строится вокруг управления сетевой нагрузкой при работе с потоковыми 3D-данными: тайлами, текстурами, геометрией, а также внешними сервисами (геокодинг, terrain, imagery). Основная цель — предотвращение перегрузки браузера и серверов при одновременной загрузке большого количества ресурсов сцены.
Ключевая особенность архитектуры заключается в том, что визуализация в Cesium является потоковой и приоритетной, а не линейной: система сама решает, какие запросы критичны для текущего кадра, а какие могут быть отложены.
Основной компонент, отвечающий за rate limiting, — это
Cesium.RequestScheduler. Он управляет очередями сетевых
запросов и распределяет их по приоритетам.
Система учитывает два основных типа лимитов:
Внутри Cesium запросы делятся на категории:
REQUESTS_PER_SERVERREQUESTS_PER_SERVER_THROTTLEREQUESTS_PER_SERVER_INFLIGHTКаждый сервер (или endpoint) получает собственный набор ограничений, что предотвращает монопольное использование соединений одним источником.
Пример конфигурации:
Cesium.RequestScheduler.maximumRequestsPerServer = 18;
Cesium.RequestScheduler.maximumRequestsPerServerWithoutThrottling = 6;
Cesium.RequestScheduler.throttleRequests = true;
Эта конфигурация задаёт базовую модель:
Каждый запрос в Cesium получает приоритет. Он зависит от типа данных и их визуальной значимости.
Основные уровни приоритета:
Система динамически перераспределяет очередь в зависимости от движения камеры. При резком перемещении происходит перерасчёт приоритетов, и часть запросов может быть отменена.
Важный аспект: отмена запросов не блокирует сервер, но снижает сетевой шум и экономит пропускную способность.
Cesium учитывает ограничения HTTP/1.1 и HTTP/2:
Cesium не полагается полностью на браузер, а вводит собственную очередь ожидания.
Ключевые механизмы:
Перемещение между очередями происходит каждый кадр в render loop.
При работе с Cesium3DTileset система ограничения
запросов становится критически важной, поскольку сцена может содержать
десятки тысяч тайлов.
Алгоритм загрузки:
Параметр:
maximumScreenSpaceError: 16
влияет не только на качество, но и на количество сетевых операций: чем выше детализация, тем больше запросов одновременно активируется.
При перегрузке сети Cesium снижает агрессивность загрузки, откладывая менее важные тайлы.
Слои изображений (imagery layers) создают отдельный поток запросов. Для них применяются отдельные правила:
Типичный источник нагрузки — тайловые сервисы (XYZ, WMTS).
Пример:
const imageryLayer = new Cesium.ImageryLayer(
new Cesium.OpenStreetMapImageryProvider({
url: "https://tile.openstreetmap.org/"
})
);
Cesium ограничивает число одновременных загрузок текстур, чтобы не блокировать геометрию сцены.
При использовании Cesium Ion добавляется внешний слой rate limiting на стороне сервиса:
CesiumJS не получает прямую информацию о лимитах сервера, поэтому использует косвенные механизмы:
При превышении лимитов система переходит в режим деградации нагрузки:
Если сервер возвращает ошибки:
429 Too Many Requests503 Service UnavailableCesium включает backoff-стратегию с увеличением интервалов повторных попыток.
Режим:
scene.requestRenderMode = true;
влияет на rate limiting косвенно. В этом режиме:
Это снижает нагрузку на сеть, но увеличивает задержку отображения новых данных.
Cesium активно использует несколько уровней кэша:
Кэш снижает фактическое количество сетевых обращений, что напрямую уменьшает давление на rate limiting.
Для 3D Tiles:
В реальных приложениях часто требуется настройка под слабые каналы связи.
Типичная стратегия:
Cesium.RequestScheduler.maximumRequestsPerServer = 8;
Cesium.RequestScheduler.maximumRequestsPerServerWithoutThrottling = 2;
Cesium.RequestScheduler.throttleRequests = true;
Дополнительно:
maximumScreenSpaceErrortileset.preloadFlightDestinations = false)При высокой задержке сети система автоматически:
Ключевой эффект — стабильность кадра вместо полного качества сцены.
Cesium активно использует отмену запросов (cancellation tokens). Это позволяет:
Отменённые запросы освобождают слот в RequestScheduler, позволяя запускать более актуальные операции.
При большом количестве Cesium3DTileset и imagery layers
возникает конкуренция за ресурсы.
Основные методы контроля:
Каждый tileset конкурирует за общий пул запросов, поэтому архитектура сцены напрямую влияет на сетевую нагрузку.
Типичная модель приоритизации:
Cesium перераспределяет ресурсы динамически, но разработчик может косвенно влиять через настройки видимости слоёв и геометрию сцены.
Во время интерактивного перемещения камеры система:
После остановки камеры:
Эта модель позволяет сохранять интерактивность даже при ограниченном канале связи.