Skip to content

Commit 5765e28

Browse files
authored
[FSSDK-9417] refactor: improve OptimizelyConfig instantiation performance (#828)
1 parent ac00afc commit 5765e28

File tree

1 file changed

+30
-19
lines changed
  • packages/optimizely-sdk/lib/core/optimizely_config

1 file changed

+30
-19
lines changed

packages/optimizely-sdk/lib/core/optimizely_config/index.ts

Lines changed: 30 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/**
2-
* Copyright 2020-2021, Optimizely
2+
* Copyright 2020-2023, Optimizely
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -74,9 +74,15 @@ export class OptimizelyConfig {
7474
return resultMap;
7575
}, {});
7676

77-
const experimentsMapById = OptimizelyConfig.getExperimentsMapById(configObj, featureIdVariablesMap);
77+
const variableIdMap = OptimizelyConfig.getVariableIdMap(configObj);
78+
79+
const experimentsMapById = OptimizelyConfig.getExperimentsMapById(
80+
configObj, featureIdVariablesMap, variableIdMap
81+
);
7882
this.experimentsMap = OptimizelyConfig.getExperimentsKeyMap(experimentsMapById);
79-
this.featuresMap = OptimizelyConfig.getFeaturesMap(configObj, featureIdVariablesMap, experimentsMapById);
83+
this.featuresMap = OptimizelyConfig.getFeaturesMap(
84+
configObj, featureIdVariablesMap, experimentsMapById, variableIdMap
85+
);
8086
this.datafile = datafile;
8187
}
8288

@@ -242,7 +248,7 @@ export class OptimizelyConfig {
242248
* Gets Map of all experiment variations and variables including rollouts
243249
* @param {Variation[]} variations
244250
* @param {FeatureVariablesMap} featureIdVariableMap
245-
* @param {[id: string]: FeatureVariable} variableIdMap
251+
* @param {{[id: string]: FeatureVariable}} variableIdMap
246252
* @param {string} featureId
247253
* @returns {[key: string]: Variation} Variations mapped by key
248254
*/
@@ -292,19 +298,20 @@ export class OptimizelyConfig {
292298

293299
/**
294300
* Gets list of rollout experiments
295-
* @param {ProjectConfig} configObj
296-
* @param {FeatureVariablesMap} featureVariableIdMap
297-
* @param {string} featureId
298-
* @param {Experiment[]} experiments
299-
* @returns {OptimizelyExperiment[]} List of Optimizely rollout experiments
301+
* @param {ProjectConfig} configObj
302+
* @param {FeatureVariablesMap} featureVariableIdMap
303+
* @param {string} featureId
304+
* @param {Experiment[]} experiments
305+
* @param {{[id: string]: FeatureVariable}} variableIdMap
306+
* @returns {OptimizelyExperiment[]} List of Optimizely rollout experiments
300307
*/
301308
static getDeliveryRules(
302309
configObj: ProjectConfig,
303310
featureVariableIdMap: FeatureVariablesMap,
304311
featureId: string,
305-
experiments: Experiment[]
312+
experiments: Experiment[],
313+
variableIdMap: {[id: string]: FeatureVariable}
306314
): OptimizelyExperiment[] {
307-
const variableIdMap = OptimizelyConfig.getVariableIdMap(configObj);
308315
return experiments.map((experiment) => {
309316
return {
310317
id: experiment.id,
@@ -339,13 +346,14 @@ export class OptimizelyConfig {
339346
* Get experiments mapped by their id's which are not part of a rollout
340347
* @param {ProjectConfig} configObj
341348
* @param {FeatureVariablesMap} featureIdVariableMap
349+
* @param {{[id: string]: FeatureVariable}} variableIdMap
342350
* @returns {[id: string]: OptimizelyExperiment} Experiments mapped by id
343351
*/
344352
static getExperimentsMapById(
345353
configObj: ProjectConfig,
346-
featureIdVariableMap: FeatureVariablesMap
354+
featureIdVariableMap: FeatureVariablesMap,
355+
variableIdMap: {[id: string]: FeatureVariable}
347356
): { [id: string]: OptimizelyExperiment } {
348-
const variableIdMap = OptimizelyConfig.getVariableIdMap(configObj);
349357
const rolloutExperimentIds = this.getRolloutExperimentIds(configObj.rollouts);
350358

351359
const experiments = configObj.experiments;
@@ -391,15 +399,17 @@ export class OptimizelyConfig {
391399

392400
/**
393401
* Gets Map of all FeatureFlags and associated experiment map inside it
394-
* @param {ProjectConfig} configObj
395-
* @param {FeatureVariablesMap} featureVariableIdMap
396-
* @param {OptimizelyExperimentsMap} experimentsMapById
397-
* @returns {OptimizelyFeaturesMap} OptimizelyFeature mapped by key
402+
* @param {ProjectConfig} configObj
403+
* @param {FeatureVariablesMap} featureVariableIdMap
404+
* @param {OptimizelyExperimentsMap} experimentsMapById
405+
* @param {{[id: string]: FeatureVariable}} variableIdMap
406+
* @returns {OptimizelyFeaturesMap} OptimizelyFeature mapped by key
398407
*/
399408
static getFeaturesMap(
400409
configObj: ProjectConfig,
401410
featureVariableIdMap: FeatureVariablesMap,
402-
experimentsMapById: OptimizelyExperimentsMap
411+
experimentsMapById: OptimizelyExperimentsMap,
412+
variableIdMap: {[id: string]: FeatureVariable}
403413
): OptimizelyFeaturesMap {
404414
const featuresMap: OptimizelyFeaturesMap = {};
405415
configObj.featureFlags.forEach((featureFlag) => {
@@ -428,7 +438,8 @@ export class OptimizelyConfig {
428438
configObj,
429439
featureVariableIdMap,
430440
featureFlag.id,
431-
rollout.experiments
441+
rollout.experiments,
442+
variableIdMap,
432443
);
433444
}
434445
featuresMap[featureFlag.key] = {

0 commit comments

Comments
 (0)