В экосистеме MapLibre GL JS устаревшие функции (deprecated) обозначают части публичного API, которые сохраняются для обратной совместимости, но не рекомендуются к использованию в новых проектах. Такие элементы постепенно теряют поддержку и могут быть удалены в будущих мажорных версиях.
Основная причина появления устаревших функций — эволюция архитектуры рендеринга карт, переход к более строгому соответствию спецификации Style Specification, а также оптимизация производительности WebGL-движка.
Ключевые признаки deprecated API:
Ранние версии, унаследованные от Mapbox GL JS, использовали конфигурации, которые со временем были признаны избыточными или небезопасными.
В классическом Mapbox GL JS доступ к API требовал установки токена:
mapboxgl.accessToken = 'TOKEN';
В MapLibre GL JS этот механизм считается устаревшим в контексте архитектуры, поскольку библиотека не привязана к конкретному облачному сервису. Использование токена сохраняется только как совместимость с существующим кодом.
Современный подход:
style без зависимости от внешних
APIНекоторые опции конструктора считались временными и постепенно исключались:
hash: true (в ряде реализаций заменён на более гибкие
URL-хендлеры)interactive: true (поведение теперь всегда управляется
через event listeners)Современная архитектура предполагает, что интерактивность карты включена по умолчанию и управляется через события.
Хотя методы:
map.setZoom(10);
map.getZoom();
не удалены, устаревшим считается их использование в синхронных вычислительных цепочках, где раньше допускалось построение логики вида:
const zoom = map.setZoom(10).getZoom();
Современная модель разделяет операции изменения состояния и чтения
через события moveend, zoomend.
Методы анимации карты:
jumpToeaseToflyToне являются удалёнными, но устаревшим считается их использование без контроля состояния анимации.
Ранее применялись конструкции:
map.flyTo({ center: [0, 0], zoom: 5 });
map.flyTo({ zoom: 10 });
Проблема заключалась в накоплении анимационных переходов без отмены предыдущих.
Современный подход:
Использование stop() перед новой анимацией:
map.stop();
map.flyTo({ center: [0, 0], zoom: 5 });
Исторически использовались конструкции:
map.on('click', handler);
map.off('click', handler);
Устаревание связано не с самим API, а с отсутствием пространств имён событий и сложностью управления подписками.
В современных архитектурах рекомендуется:
Ранее активно использовались:
style.loadsource.loadВ современных версиях предпочтение отдаётся:
map.on('load')map.isStyleLoaded()Причина — унификация жизненного цикла карты.
Ранние версии позволяли добавлять слои без строгой проверки структуры:
map.addLayer({
id: 'points',
type: 'circle'
});
Отсутствие источника считалось допустимым в некоторых старых сборках, но позже стало deprecated-поведением.
Актуальная модель требует:
sourceУстаревший паттерн:
map.removeLayer('layer-id');
без проверки наличия слоя приводил к ошибкам выполнения. В новых версиях рекомендуется предварительная проверка:
if (map.getLayer('layer-id')) {
map.removeLayer('layer-id');
}
Ранее изменения свойств слоёв не всегда синхронизировались с текущим стилем, что приводило к неочевидным багам.
Устаревшим считается использование этих методов без учёта жизненного цикла style reload.
Ранний подход:
map.getSource('points').setData(geojson);
при каждом изменении данных считался нормой.
Это поведение признано deprecated в высоконагруженных сценариях.
Причина:
Современная альтернатива:
Устаревший паттерн:
map.addSource('img', {
type: 'image',
url: 'frame1.png'
});
с последующей постоянной заменой url считался
неэффективным.
Ранее активно использовался:
map.getCanvasContainer();
для добавления пользовательских элементов.
Этот подход признан устаревшим для сложных интерфейсов, поскольку смешивает DOM-слой и WebGL-контекст.
Современная практика:
map.remove();
в старых версиях не всегда корректно освобождал WebGL контекст, что приводило к утечкам памяти.
Современные версии требуют гарантированного вызова очистки ресурсов перед удалением экземпляра карты.
Функция:
mapboxgl.supported()
исторически использовалась для проверки поддержки WebGL.
В MapLibre GL JS она считается устаревшей в пользу:
WebGLRenderingContext проверкиcanvas.getContext('webgl')Причина — необходимость независимости от глобального объекта
mapboxgl.
В ранних версиях некоторые методы допускали передачу пользовательских анимационных циклов, что позже было исключено как небезопасная практика.
Основная стратегия миграции строится на трёх принципах:
Ранее:
map.setCenter([0, 0]).setZoom(5);
Современный подход:
map.setCenter([0, 0]);
map.setZoom(5);
с последующей обработкой через события.
Использование событий:
loadidlerendermoveendвместо синхронных проверок состояния.
Ранее допускалась неявная структура данных, теперь требуется:
Устаревший код:
setInterval(() => {
map.getSource('points').setData(data);
}, 1000);
Проблема: постоянная полная перерисовка.
Современный подход:
Ранее:
map.on('style.load', initLayers);
Современный вариант:
map.on('load', initLayers);
или:
if (map.isStyleLoaded()) {
initLayers();
}
Ранее:
map.flyTo({ center: A });
map.flyTo({ center: B });
Современный подход:
map.stop();
map.flyTo({ center: A });
setTimeout(() => {
map.flyTo({ center: B });
}, 300);
или через очередь анимаций в пользовательской логике.
Ранее:
map.removeLayer('roads');
Современный вариант:
if (map.getLayer('roads')) {
map.removeLayer('roads');
}
или через централизованный менеджер слоёв.
Эволюция MapLibre GL JS привела к нескольким системным изменениям:
Эти изменения напрямую формируют список deprecated функций и определяют их дальнейшую судьбу в API.