Storage Service

The SDK operates in a stateless mode by default, meaning each get_flag call triggers a fresh evaluation of the flag against the current user context.

To optimize performance and maintain consistency, you can implement a custom storage mechanism by passing a storage parameter during initialization. This allows you to persist feature flag decisions in your preferred database system (like Redis, MongoDB, or any other data store).

Key benefits of implementing storage:

  1. Improved performance by caching decisions
  2. Consistent user experience across sessions
  3. Reduced load on your application

The storage mechanism ensures that once a decision is made for a user, it remains consistent even if campaign settings are modified in the VWO Application. This is particularly useful for maintaining a stable user experience during A/B tests and feature rollouts.

How to Implement a Storage Service

Storage Service is optional while instantiating the VWO SDK. However, to ensure sticky variation assignments, we recommend implementing it.

Usage

import React from "react";
import { VWOProvider } from "vwo-fme-react-sdk";

class StorageConnector extends StorageConnector {
  constructor() {
    super();
  }

  /**
   * Get data from storage
   * @param {string} featureKey
   * @param {string} userId
   * @returns {Promise<any>}
   */
  async get(featureKey, userId) {
    // Browser localStorage/sessionStorage can be used to persist data
    
    // return await data (based on featureKey and userId)
  }

  /**
   * Set data in storage
   * @param {object} data
   */
  async set(data) {
    // Browser localStorage/sessionStorage can be used to persist data
    
    // Set data corresponding to a featureKey and user ID
    // Use data.featureKey and data.userId to store the above data for a specific feature and a user
  }
}

const vwoConfig = {
  sdkKey: '32-alpha-numeric-sdk-key',  // Your VWO SDK Key
  accountId: '123456',  // Your VWO Account ID
  logger: {
    level: 'debug',  // Optional log level for debugging
  },
  storage: StorageConnector
};

const App = () => (
  <VWOProvider config={vwoConfig} context={{ id: "unique_user_id" }}>
    <YourComponent />
  </VWOProvider>
);

export default App;

Storage Service should expose two methods: get and set. These methods are used by VWO whenever there is a need to read or write from the storage service.

Method NameParamsDescriptionReturns
getfeatureKey, userIdRetrieve stored data corresponding to featureKey and userIdReturns a matching user-feature data mapping corresponding to featureKey and userId passed
setdataStore user-feature data mappingnull