From 60245a57d85541cd75f4c27c01cc9ffa63e15750 Mon Sep 17 00:00:00 2001 From: Tom Payne Date: Mon, 4 Nov 2013 18:18:31 +0100 Subject: [PATCH] Make ol.Object#getKeys about 10x faster --- src/ol/object.js | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/src/ol/object.js b/src/ol/object.js index 4c9338a932..5f8bdb0968 100644 --- a/src/ol/object.js +++ b/src/ol/object.js @@ -191,10 +191,29 @@ ol.Object.prototype.get = function(key) { * @return {Array.} List of property names. */ ol.Object.prototype.getKeys = function() { - var keys = goog.object.getKeys(ol.Object.getAccessors(this)).concat( - goog.object.getKeys(this.values_)); - goog.array.removeDuplicates(keys); - return keys; + var accessors = ol.Object.getAccessors(this); + var keysObject; + if (goog.object.isEmpty(this.values_)) { + if (goog.object.isEmpty(accessors)) { + return []; + } else { + keysObject = accessors; + } + } else { + if (goog.object.isEmpty(accessors)) { + keysObject = this.values_; + } else { + keysObject = {}; + var key; + for (key in this.values_) { + keysObject[key] = true; + } + for (key in accessors) { + keysObject[key] = true; + } + } + } + return goog.object.getKeys(keysObject); };