Оптимизация работы с графикой
Для определений и базовых понятий см.:
Режим dynamic: true/false
Параметр dynamic в источнике данных (YMapFeatureDataSource) определяет, как будет происходить обновление объектов на карте:
- dynamic: true (по умолчанию) — обеспечивает синхронное обновление графики. Рекомендуется для интерактивных инструментов (редакторы, линейки), где важна мгновенная реакция интерфейса.
- dynamic: false — обеспечивает высокую производительность при большом количестве объектов, но обновление графики происходит асинхронно (UI может лагать при редактировании).
Примечание
Текущая реализация: при dynamic: true используется растровый движок (SVG), при dynamic: false — векторный (WebGL). Это деталь реализации и не часть публичного API. В будущем поведение может измениться, не полагайтесь на выбор движка напрямую.
Практические сценарии
- Массовое отображение (1000+ объектов): используйте dynamic: false.
- Интерактивные сценарии (редактирование, линейки): используйте dynamic: true.
- Для гибридных сценариев: основной массив объектов — dataSource с dynamic: false, редактируемый объект — отдельный dataSource с dynamic: true.
Примеры
vanilla
react
const featuresSource = new YMapFeatureDataSource({ id: 'features', dynamic: false });
map.addChild(featuresSource);
map.addChild(new YMapLayer({ source: 'features', type: 'features' }));
const polygon = new YMapFeature({
geometry: { type: 'Polygon', coordinates: [coords] },
style: POLYGON_STYLE,
source: 'features'
});
featuresSource.addChild(polygon);
<YMapFeatureDataSource id="features" dynamic={false} />
<YMapLayer source="features" type="features" />
<YMapFeature geometry={{ type: 'Polygon', coordinates: [coords] }} style={POLYGON_STYLE} source="features" />
Особенности z-index и порядок слоёв
- Растровый слой (dynamic: true) всегда отображается поверх векторного (dynamic: false), независимо от значения z-index.
- Нельзя разместить растровый слой под векторным — это ограничение архитектуры движков.
- Если требуется отображать фичи под зданиями или другими объектами схемы, используйте только векторный слой (dynamic: false) и корректно настраивайте порядок слоёв через z-index.
Подробнее про порядок слоёв и z-index см. в документации по слоям.
Рекомендации
- Не смешивайте интерактивные и массовые объекты в одном dataSource.
- Для сценариев с редактированием одного объекта из тысячи: временно переносите его в dataSource с dynamic: true, затем возвращайте обратно.
- Всегда указывайте значение dynamic явно в критичных сценариях, чтобы избежать неожиданного поведения при обновлениях API.