8000 [FSSDK-9417] refactor: improve OptimizelyConfig instantiation perform… · chrisvaf/javascript-sdk@5765e28 · GitHub
[go: up one dir, main page]

Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 5765e28

Browse files
authored
[FSSDK-9417] refactor: improve OptimizelyConfig instantiation performance (optimizely#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)
0