diff --git a/src/ol/Object.js b/src/ol/Object.js index c5ef7ef757..0ea4a1bfad 100644 --- a/src/ol/Object.js +++ b/src/ol/Object.js @@ -172,9 +172,13 @@ class BaseObject extends Observable { notify(key, oldValue) { let eventType; eventType = `change:${key}`; - this.dispatchEvent(new ObjectEvent(eventType, key, oldValue)); + if (this.hasListener(eventType)) { + this.dispatchEvent(new ObjectEvent(eventType, key, oldValue)); + } eventType = ObjectEventType.PROPERTYCHANGE; - this.dispatchEvent(new ObjectEvent(eventType, key, oldValue)); + if (this.hasListener(eventType)) { + this.dispatchEvent(new ObjectEvent(eventType, key, oldValue)); + } } /** diff --git a/src/ol/source/Image.js b/src/ol/source/Image.js index 7253aca49d..7fe2365584 100644 --- a/src/ol/source/Image.js +++ b/src/ol/source/Image.js @@ -240,27 +240,25 @@ class ImageSource extends Source { */ handleImageChange(event) { const image = /** @type {import("../Image.js").default} */ (event.target); + let type; switch (image.getState()) { case ImageState.LOADING: this.loading = true; - this.dispatchEvent( - new ImageSourceEvent(ImageSourceEventType.IMAGELOADSTART, image) - ); + type = ImageSourceEventType.IMAGELOADSTART; break; case ImageState.LOADED: this.loading = false; - this.dispatchEvent( - new ImageSourceEvent(ImageSourceEventType.IMAGELOADEND, image) - ); + type = ImageSourceEventType.IMAGELOADEND; break; case ImageState.ERROR: this.loading = false; - this.dispatchEvent( - new ImageSourceEvent(ImageSourceEventType.IMAGELOADERROR, image) - ); + type = ImageSourceEventType.IMAGELOADERROR; break; default: - // pass + return; + } + if (this.hasListener(type)) { + this.dispatchEvent(new ImageSourceEvent(type, image)); } } } diff --git a/src/ol/source/Vector.js b/src/ol/source/Vector.js index 84f1ee9e04..aed90d7369 100644 --- a/src/ol/source/Vector.js +++ b/src/ol/source/Vector.js @@ -457,10 +457,12 @@ class VectorSource extends Source { this.featuresRtree_.load(extents, geometryFeatures); } - for (let i = 0, length = newFeatures.length; i < length; i++) { - this.dispatchEvent( - new VectorSourceEvent(VectorEventType.ADDFEATURE, newFeatures[i]) - ); + if (this.hasListener(VectorEventType.ADDFEATURE)) { + for (let i = 0, length = newFeatures.length; i < length; i++) { + this.dispatchEvent( + new VectorSourceEvent(VectorEventType.ADDFEATURE, newFeatures[i]) + ); + } } }