Skip to content

Commit aefda74

Browse files
authored
avoid rendering markers on every view change (openhab#228)
Signed-off-by: digitaldan <[email protected]>
1 parent d5ad2bd commit aefda74

File tree

1 file changed

+15
-10
lines changed

1 file changed

+15
-10
lines changed

bundles/org.openhab.ui/web/src/components/widgets/plan/oh-plan-page.vue

+15-10
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,8 @@ export default {
153153
zoom: -0.5,
154154
crs: CRS.Simple,
155155
showMap: true,
156-
mapKey: this.$f7.utils.id()
156+
mapKey: this.$f7.utils.id(),
157+
markers: []
157158
}
158159
},
159160
computed: {
@@ -172,15 +173,6 @@ export default {
172173
scrollWheelZoom: false,
173174
zoomControl: false
174175
} : {})
175-
},
176-
markers () {
177-
return this.context.component.slots.default.filter((e) => {
178-
const zoomVisibilityMin = parseFloat(e.config.zoomVisibilityMin)
179-
const zoomVisibilityMax = parseFloat(e.config.zoomVisibilityMax)
180-
const isVisibleMin = isNaN(zoomVisibilityMin) || zoomVisibilityMin < this.currentZoom
181-
const isVisibleMax = isNaN(zoomVisibilityMax) || zoomVisibilityMax > this.currentZoom
182-
return this.context.editmode != null || (isVisibleMin && isVisibleMax)
183-
})
184176
}
185177
},
186178
mounted () {
@@ -194,6 +186,19 @@ export default {
194186
methods: {
195187
zoomUpdate (zoom) {
196188
this.currentZoom = zoom
189+
const allMarkers = this.context.component.slots.default
190+
const visibleMarkers = allMarkers.filter((e) => {
191+
const zoomVisibilityMin = parseFloat(e.config.zoomVisibilityMin)
192+
const zoomVisibilityMax = parseFloat(e.config.zoomVisibilityMax)
193+
const isVisibleMin = isNaN(zoomVisibilityMin) || zoomVisibilityMin < this.currentZoom
194+
const isVisibleMax = isNaN(zoomVisibilityMax) || zoomVisibilityMax > this.currentZoom
195+
return this.context.editmode != null || (isVisibleMin && isVisibleMax)
196+
})
197+
// only update our markers if the list has changed to avoid unessesary rendering
198+
if (visibleMarkers.length !== this.markers.length ||
199+
visibleMarkers.every((e) => this.markers.indexOf(e) < 0)) {
200+
this.markers = visibleMarkers
201+
}
197202
},
198203
centerUpdate (center) {
199204
this.currentCenter = center

0 commit comments

Comments
 (0)