Skip to content

Commit 558b84b

Browse files
committed
1.1.2
1 parent 98287f8 commit 558b84b

4 files changed

Lines changed: 39 additions & 12 deletions

File tree

CHANGELOG.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,14 @@ Format basiert auf [Keep a Changelog](https://keepachangelog.com/de/1.0.0/), Ver
55

66
---
77

8+
## [1.1.2] – 2026-05-11
9+
10+
### Gefixt
11+
12+
- **Performance-Regression bei 3D-Gebäuden und Kamera-Animationen (`flyTo`)** – der in 1.1.1 eingeführte `vmFixExtrusionLayers()`-Helper wurde auf jedes `styledata`-Event gehängt und bei Animationen sehr häufig ausgeführt. Die enthaltene `JSON.stringify`-Schleife über alle Layer hat den Browser stark ausgelastet und Animationen ruckeln lassen. Der Patch wird jetzt nur noch **einmal pro Style-Load** ausgeführt und bei `style.load` (z.B. nach Satellit-Toggle) sauber resettet. (#1)
13+
14+
---
15+
816
## [1.1.1] – 2026-04-16
917

1018
### Gefixt

assets/build/vectormaps.js

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -483,9 +483,17 @@ class VectorMapPicker {
483483
// Nach Stil-Wechsel werden sie stattdessen via map.once('idle', ...) aufgerufen.
484484
// Auf Satellitenbild gibt es keinen Vektor-Layer → kein 3D möglich.
485485
const _isSatellite = () => map.isStyleLoaded() && !!map.getSource('satellite');
486-
// Früh patchen: sobald Style-Layer verfügbar — OHNE isStyleLoaded()-Guard
487-
// verhindert Warnungen beim ersten Tile-Render (bevor load-Event feuert)
488-
map.on('styledata', () => { if (!_isSatellite()) vmFixExtrusionLayers(map); });
486+
// Performance: vmFixExtrusionLayers nur einmal pro Style-Load ausführen.
487+
// Bei jedem styledata-Event (während Animationen sehr häufig!) würde die
488+
// teure JSON.stringify-Schleife sonst die CPU auslasten. Flag wird bei
489+
// 'style.load' zurückgesetzt (z.B. nach Satellit-Toggle / setStyle).
490+
let _extrusionPatched = false;
491+
map.on('style.load', () => { _extrusionPatched = false; });
492+
map.on('styledata', () => {
493+
if (_extrusionPatched || _isSatellite() || !map.isStyleLoaded()) return;
494+
vmFixExtrusionLayers(map);
495+
_extrusionPatched = true;
496+
});
489497
map.on('styledata', () => {
490498
if (!map.isStyleLoaded()) return;
491499
if (!_isSatellite()) add3dBuildings();
@@ -1213,8 +1221,19 @@ function vmBuildMap(el) {
12131221
});
12141222
}
12151223

1216-
// Früh patchen: sobald Style-Layer verfügbar — OHNE isStyleLoaded()-Guard
1217-
if (!isRaster) map.on('styledata', () => vmFixExtrusionLayers(map));
1224+
// Performance: vmFixExtrusionLayers nur einmal pro Style-Load ausführen.
1225+
// Vorher lief die teure JSON.stringify-Schleife bei JEDEM styledata-Event,
1226+
// was während flyTo()/Animationen die CPU auslastete und 3D-Gebäude ruckeln
1227+
// ließ. Flag wird bei 'style.load' zurückgesetzt (z.B. nach Satellit-Toggle).
1228+
if (!isRaster) {
1229+
let _extrusionPatched = false;
1230+
map.on('style.load', () => { _extrusionPatched = false; });
1231+
map.on('styledata', () => {
1232+
if (_extrusionPatched || !map.isStyleLoaded()) return;
1233+
vmFixExtrusionLayers(map);
1234+
_extrusionPatched = true;
1235+
});
1236+
}
12181237

12191238
// styledata: 3D-Gebäude + Theme-Wiederherstellung (z.B. nach Satellit-Toggle)
12201239
// Debounce-Flag verhindert Endlosschleife: setPaintProperty feuert selbst styledata

0 commit comments

Comments
 (0)