From 1b46f38696a04239841505e45dc25c6cbf06d665 Mon Sep 17 00:00:00 2001 From: Andreas Hocevar Date: Sat, 29 Jul 2017 23:10:53 +0200 Subject: [PATCH] Do not use Array.prototype.forEach for potentially large arrays --- src/ol/collection.js | 6 +++++- src/ol/format/wfs.js | 6 ++++-- src/ol/renderer/canvas/vectorlayer.js | 6 ++++-- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/ol/collection.js b/src/ol/collection.js index d168cb7d16..fda49e5f36 100644 --- a/src/ol/collection.js +++ b/src/ol/collection.js @@ -95,7 +95,11 @@ ol.Collection.prototype.extend = function(arr) { * @api */ ol.Collection.prototype.forEach = function(f, opt_this) { - this.array_.forEach(f, opt_this); + var fn = (opt_this) ? f.bind(opt_this) : f; + var array = this.array_; + for (var i = 0, ii = array.length; i < ii; ++i) { + fn(array[i], i, array); + } }; diff --git a/src/ol/format/wfs.js b/src/ol/format/wfs.js index ddd38dc2be..a30a9fe3d8 100644 --- a/src/ol/format/wfs.js +++ b/src/ol/format/wfs.js @@ -688,12 +688,14 @@ ol.format.WFS.writeDuringFilter_ = function(node, filter, objectStack) { ol.format.WFS.writeLogicalFilter_ = function(node, filter, objectStack) { /** @type {ol.XmlNodeStackItem} */ var item = {node: node}; - filter.conditions.forEach(function(condition) { + var conditions = filter.conditions; + for (var i = 0, ii = conditions.length; i < ii; ++i) { + var condition = conditions[i]; ol.xml.pushSerializeAndPop(item, ol.format.WFS.GETFEATURE_SERIALIZERS_, ol.xml.makeSimpleNodeFactory(condition.getTagName()), [condition], objectStack); - }); + } }; diff --git a/src/ol/renderer/canvas/vectorlayer.js b/src/ol/renderer/canvas/vectorlayer.js index 55471f16b8..73491e8525 100644 --- a/src/ol/renderer/canvas/vectorlayer.js +++ b/src/ol/renderer/canvas/vectorlayer.js @@ -319,7 +319,7 @@ ol.renderer.canvas.VectorLayer.prototype.prepareFrame = function(frameState, lay feature, resolution, pixelRatio, styles, replayGroup); this.dirty_ = this.dirty_ || dirty; } - }; + }.bind(this); if (vectorLayerRenderOrder) { /** @type {Array.} */ var features = []; @@ -331,7 +331,9 @@ ol.renderer.canvas.VectorLayer.prototype.prepareFrame = function(frameState, lay features.push(feature); }, this); features.sort(vectorLayerRenderOrder); - features.forEach(renderFeature, this); + for (var i = 0, ii = features.length; i < ii; ++i) { + renderFeature(features[i]); + } } else { vectorSource.forEachFeatureInExtent(extent, renderFeature, this); }