При использовании Deck.gl через CDN важно различать два базовых подхода к загрузке библиотек: UMD-сборки и ES Modules. Эти стратегии определяют структуру импорта, совместимость с окружением и возможности оптимизации.
UMD (Universal Module Definition) применяется в
классических сценариях подключения через
<script>:
<script src="https://unpkg.com/deck.gl@latest/dist.min.js"></script>
После подключения библиотека становится доступной через глобальный объект:
const { DeckGL, ScatterplotLayer } = deck;
Особенности подхода:
ES Modules через CDN предоставляют более современную модель:
<script type="module">
import { DeckGL } from "https://cdn.skypack.dev/@deck.gl/core";
</script>
или через более предсказуемые CDN:
import { ScatterplotLayer } from "https://esm.sh/@deck.gl/layers";
Преимущества:
Критически важным аспектом CDN-стратегии является фиксация версии.
Использование latest в production приводит к
неконтролируемым изменениям поведения визуализации.
Пример корректного подхода:
<script src="https://unpkg.com/deck.gl@8.9.36/dist.min.js"></script>
или ES Modules:
import { LineLayer } from "https://cdn.jsdelivr.net/npm/@deck.gl/layers@8.9.36/dist/esm/index.js";
Основные принципы:
unpkg
jsDelivr
esm.sh
skypack
Deck.gl имеет модульную архитектуру:
@deck.gl/core@deck.gl/layers@deck.gl/aggregation-layers@deck.gl/react@deck.gl/extensionsПри CDN-подключении важно избегать монолитной загрузки:
import { DeckGL } from "https://cdn.jsdelivr.net/npm/@deck.gl/core@8.9.36/dist/esm/index.js";
import { HexagonLayer } from "https://cdn.jsdelivr.net/npm/@deck.gl/aggregation-layers@8.9.36/dist/esm/index.js";
Такой подход позволяет:
CDN-стратегия Deck.gl тесно связана с поведением браузерного кеша.
Ключевые механизмы:
Cache-Control: immutableПрактическая модель:
https://cdn.jsdelivr.net/npm/@deck.gl/core@8.9.36/+esm
Данный формат позволяет:
Import Maps позволяют централизовать управление зависимостями:
<script type="importmap">
{
"imports": {
"@deck.gl/core": "https://esm.sh/@deck.gl/core@8.9.36",
"@deck.gl/layers": "https://esm.sh/@deck.gl/layers@8.9.36"
}
}
</script>
Дальнейший код становится независимым от конкретного CDN:
import { DeckGL } from "@deck.gl/core";
import { ScatterplotLayer } from "@deck.gl/layers";
Преимущества:
Deck.gl опирается на графический стек, включающий WebGL и дополнительные библиотеки (например, Three.js в некоторых расширениях).
При CDN-подходе возникают нюансы:
three и
deck.gl;Пример явного подключения:
import * as THREE from "https://cdn.jsdelivr.net/npm/three@0.160.0/build/three.module.js";
И использование в расширениях Deck.gl:
import { SimpleMeshLayer } from "https://cdn.jsdelivr.net/npm/@deck.gl/mesh-layers@8.9.36/dist/esm/index.js";
CDN-подход требует контроля за критическим путём загрузки.
Основные техники:
preload модулей
<link rel="modulepreload" href="https://esm.sh/@deck.gl/core@8.9.36">
lazy loading слоёв
const loadLayer = async () => {
const { ScatterplotLayer } = await import(
"https://esm.sh/@deck.gl/layers@8.9.36"
);
};
разделение визуализаций
Deck.gl часто используется поверх Mapbox GL JS, который также может загружаться через CDN:
<script src="https://api.mapbox.com/mapbox-gl-js/v2.15.0/mapbox-gl.js"></script>
При этом важно:
CDN-загрузка может быть дополнена кешированием через Service Worker:
Стратегия:
Типичные проблемы:
Механизмы устойчивости:
В масштабных приложениях Deck.gl CDN-стратегия часто разделяется на уровни:
Такое разделение позволяет: