Ограничения запросов

Сетевые ограничения формируют фундамент поведения MapLibre GL JS при загрузке стилей, тайлов и вспомогательных ресурсов. Модель рендеринга в библиотеке полностью опирается на асинхронные HTTP(S)-запросы, поэтому любые ограничения браузера, сервера или сети напрямую отражаются на качестве отображения карты и стабильности отрисовки.

MapLibre GL JS использует пул параллельных запросов для загрузки векторных тайлов, изображений спрайтов и шрифтовых глифов. Количество одновременно активных соединений ограничивается не только настройками библиотеки, но и браузерными лимитами на домен.

Типичная модель поведения включает:

  • ограничение числа одновременных HTTP-запросов к одному хосту;
  • внутреннюю очередь запросов тайлов;
  • приоритетизацию видимых областей карты;
  • отложенную загрузку ресурсов вне экрана.

При высокой плотности тайлов в видимой области очередь начинает перераспределять приоритет в пользу центральных тайлов экрана, что снижает нагрузку на сеть, но увеличивает задержку периферийных областей карты.

Ограничения тайловых серверов и rate limiting

Тайловые серверы часто применяют ограничения частоты запросов (rate limiting), что критично для карт с высокой интенсивностью перемещения и масштабирования.

Основные сценарии проявления ограничений:

  • HTTP 429 при превышении лимита запросов;
  • временные блокировки IP;
  • деградация скорости выдачи тайлов;
  • искусственные задержки ответа сервера.

MapLibre GL JS не реализует сложную политику повторных попыток по умолчанию, поэтому при возникновении ошибок загрузки тайлы могут временно отсутствовать до следующего цикла перерисовки.

Ограничения CORS и политика безопасности браузера

Загрузка внешних источников строго подчиняется политике CORS. Векторные тайлы, стили, изображения спрайтов и шрифты должны предоставляться с корректными заголовками доступа.

Типичные ограничения включают:

  • отсутствие заголовка Access-Control-Allow-Origin приводит к блокировке ресурса;
  • невозможность использования приватных или защищённых API без токенов;
  • ограничение чтения бинарных данных тайлов при неправильной конфигурации сервера.

Особенно чувствительными являются запросы к glyph PBF-файлам, поскольку они загружаются отдельными диапазонами и требуют корректной поддержки кросс-доменных запросов.

Ограничения длины URL и параметров запроса

При использовании динамических источников данных формируются URL с параметрами bbox, фильтрами и токенами доступа. Длина таких URL может становиться критичной при сложных стилях.

Ограничения проявляются в следующих формах:

  • превышение лимита длины URL в браузере или прокси-сервере;
  • обрезка query-параметров промежуточными балансировщиками;
  • невозможность передачи сложных фильтров через GET-запросы.

Векторные источники с динамическими параметрами особенно чувствительны к этому ограничению, поскольку bbox может расширяться при наклоне и вращении карты.

Кэширование и дедупликация запросов

Внутренний механизм MapLibre GL JS активно использует кэширование:

  • тайлы кэшируются по ключу z/x/y;
  • спрайты и glyphs кэшируются на уровне URL;
  • повторные запросы к идентичным ресурсам дедуплицируются.

Однако кэширование ограничено:

  • памятью браузера;
  • политикой HTTP cache-control;
  • очисткой WebGL контекста;
  • обновлением стиля карты.

При изменении стиля даже небольшая модификация URL приводит к полному промаху кэша, что вызывает повторную загрузку ресурсов.

Ограничения Web Workers и потоковой обработки

Векторные тайлы обрабатываются в Web Workers, что позволяет разгрузить основной поток. Тем не менее существуют ограничения:

  • ограниченный объём памяти на воркер;
  • невозможность доступа к DOM;
  • сериализация данных при передаче между потоками;
  • задержки при обработке крупных GeoJSON-структур.

При высокой плотности геометрии возможны задержки декодирования PBF-тайлов, что проявляется как временные “провалы” в отрисовке.

Ограничения источников данных (sources)

Каждый источник данных в стиле MapLibre GL JS имеет собственный набор ограничений, зависящий от типа:

Vector sources

  • ограничение на размер тайла (обычно 512x512 логических единиц);
  • ограничение на количество слоёв внутри тайла;
  • чувствительность к сложности геометрии.

Raster sources

  • ограничение на размер изображения;
  • зависимость от тайловой сетки;
  • невозможность частичного обновления содержимого.

GeoJSON sources

  • полная загрузка данных в память;
  • отсутствие тайловой сегментации по умолчанию;
  • рост затрат при увеличении количества объектов.

При превышении допустимых объёмов данных увеличивается время парсинга и снижается плавность взаимодействия.

Ограничения WebGL контекста

Рендеринг MapLibre GL JS зависит от WebGL, что накладывает аппаратные ограничения:

  • лимит текстур в GPU;
  • максимальный размер одной текстуры;
  • ограничение на число одновременно активных буферов;
  • деградация производительности при высоком числе слоёв.

При достижении лимитов WebGL возможны ошибки создания ресурсов или автоматическое упрощение сцены.

Особенно критично влияние оказывает количество символов (symbol layers), поскольку каждый текстовый элемент создаёт дополнительные GPU-ресурсы.

Ограничения спрайтов и глифов

Спрайты и шрифтовые глифы загружаются отдельными запросами и кэшируются независимо от тайлов.

Основные ограничения:

  • размер sprite.json и sprite.png;
  • число уникальных иконок в одном спрайте;
  • объём шрифтового атласа;
  • задержки загрузки при большом количестве языков.

При сложных стилях с множеством иконок возникает эффект “позднего появления” символов, когда карта уже отрисована, но подписи и маркеры догружаются с задержкой.

Ограничения трансформации запросов (transformRequest)

Механизм transformRequest позволяет модифицировать каждый сетевой запрос. Несмотря на гибкость, он имеет ограничения:

  • синхронное выполнение функции трансформации;
  • невозможность выполнения асинхронных операций;
  • ограничение производительности при сложной логике;
  • риск увеличения задержки каждого запроса.

При чрезмерной логике трансформации возникает узкое место на этапе планирования запросов, что влияет на общую скорость отрисовки.

Ограничения конкурентной загрузки тайлов

Загрузка тайлов подчиняется приоритетной системе:

  • приоритет получают тайлы в viewport;
  • тайлы за пределами экрана могут быть отменены;
  • при быстром перемещении происходит массовая отмена запросов;
  • новые запросы вытесняют устаревшие.

Такой механизм предотвращает перегрузку сети, но может приводить к визуальной “рваности” при нестабильном соединении.

Ограничения обновления стиля

Обновление стиля карты инициирует массовую перезагрузку ресурсов:

  • пересоздание слоёв;
  • повторная загрузка источников;
  • сброс кэша спрайтов и глифов;
  • повторная компиляция WebGL программ.

При частых вызовах обновления стиля возникает эффект деградации производительности, связанный с постоянной переинициализацией графического состояния.

Ограничения работы в условиях нестабильной сети

При потере соединения или высокой задержке:

  • тайлы остаются пустыми до повторного запроса;
  • отсутствует агрессивный retry-механизм;
  • рендеринг продолжается с частично загруженными данными;
  • происходит постепенное заполнение карты по мере восстановления сети.

Такая модель снижает нагрузку на клиент, но увеличивает время восстановления визуальной целостности карты.

Ограничения буферизации и потоковой передачи

Векторные данные обрабатываются потоково, однако:

  • нет полного стриминга GeoJSON в реальном времени;
  • тайлы загружаются дискретными блоками;
  • частичная загрузка внутри тайла ограничена форматом PBF.

Это создаёт границу между потоковой визуализацией и пакетной загрузкой данных.

Ограничения масштабирования и уровня детализации

При изменении zoom уровня происходят дополнительные запросы:

  • загрузка новых тайловых координат;
  • выгрузка устаревших данных;
  • пересчёт стилей в зависимости от масштаба.

Слишком частое масштабирование приводит к лавинообразной генерации сетевых запросов, которые могут временно превышать возможности сети и сервера.

Ограничения кросс-источниковой композиции

Использование нескольких источников данных в одном стиле приводит к:

  • увеличению количества параллельных запросов;
  • конкуренции за сетевые ресурсы;
  • различной латентности между слоями;
  • визуальной несинхронности отображения.

При объединении источников с разной скоростью ответа карта может отображать слои асинхронно, создавая эффект “слоёной сборки” изображения.