Skip to content

Commit eaf1705

Browse files
(chore): Performance. More maps for performance (#172)
* add more maps for faster lookup * remove log as it is costing too much at startup to load the utils.sdkVersion
1 parent ae52ff0 commit eaf1705

File tree

2 files changed

+29
-6
lines changed

2 files changed

+29
-6
lines changed

OptimizelySDK/Data Model/ProjectConfig.swift

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,13 @@ class ProjectConfig {
3232
allExperiments.forEach({map[$0.key] = $0})
3333
return map
3434
}()
35-
35+
36+
lazy var experimentIdMap:[String:Experiment] = {
37+
var map = [String:Experiment]()
38+
allExperiments.forEach({map[$0.id] = $0})
39+
return map
40+
}()
41+
3642
lazy var experimentFeatureMap:[String:[String]] = {
3743
var experimentFeatureMap = [String:[String]]()
3844
project.featureFlags.forEach({ (ff) in
@@ -55,6 +61,24 @@ class ProjectConfig {
5561
return eventKeyMap
5662
}()
5763

64+
lazy var attributeKeyMap:[String:Attribute] = {
65+
var map = [String:Attribute]()
66+
project.attributes.forEach({map[$0.key] = $0 })
67+
return map
68+
}()
69+
70+
lazy var featureFlagKeyMap:[String:FeatureFlag] = {
71+
var map = [String:FeatureFlag]()
72+
project.featureFlags.forEach({map[$0.key] = $0 })
73+
return map
74+
}()
75+
76+
lazy var rolloutIdMap:[String:Rollout] = {
77+
var map = [String:Rollout]()
78+
project.rollouts.forEach({map[$0.id] = $0 })
79+
return map
80+
}()
81+
5882
lazy var allExperiments:[Experiment] = {
5983
return project.experiments + project.groups.map({$0.experiments}).flatMap({$0})
6084
}()
@@ -139,7 +163,7 @@ extension ProjectConfig {
139163
* Get an Experiment object for an Id.
140164
*/
141165
func getExperiment(id: String) -> Experiment? {
142-
return allExperiments.filter { $0.id == id }.first
166+
return experimentIdMap[id]
143167
}
144168

145169
/**
@@ -160,14 +184,14 @@ extension ProjectConfig {
160184
* Get a Feature Flag object for a key.
161185
*/
162186
func getFeatureFlag(key: String) -> FeatureFlag? {
163-
return project.featureFlags.filter{ $0.key == key }.first
187+
return featureFlagKeyMap[key]
164188
}
165189

166190
/**
167191
* Get a Rollout object for an Id.
168192
*/
169193
func getRollout(id: String) -> Rollout? {
170-
return project.rollouts.filter{ $0.id == id }.first
194+
return rolloutIdMap[id]
171195
}
172196

173197
/**
@@ -189,7 +213,7 @@ extension ProjectConfig {
189213
* Get an attribute for a given key.
190214
*/
191215
func getAttribute(key: String) -> Attribute? {
192-
return project.attributes.filter{ $0.key == key }.first
216+
return attributeKeyMap[key]
193217
}
194218

195219
/**

OptimizelySDK/Optimizely/OptimizelyClient.swift

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,6 @@ open class OptimizelyClient: NSObject {
8787
decisionService: DefaultDecisionService(userProfileService: userProfileService),
8888
notificationCenter: DefaultNotificationCenter())
8989

90-
logger.i("SDK Version: \(Utils.sdkVersion)")
9190
}
9291

9392
/// Start Optimizely SDK (Asynchronous)

0 commit comments

Comments
 (0)