更快地生产更好的产品

优化全栈是针对产品团队的功能强大的A / B测试和功能标记。

以您使用的语言工作

全栈拥有适用于大多数主要平台或作为微服务部署的SDK

在任何应用程序中进行实验。使路线图上的每个功能都有学习的机会。

交付客户旅程的每一步

深入实验您的堆栈,以在从搜索结果和促销到推荐和付款结构的所有内容上创造卓越的客户体验。

降低风险并更快地失败

在向所有人推广之前,请证明新功能,性能改进或后端更改的影响。使您的产品经理可以独立于代码部署来控制功能的推出。

视觉部分2

知道什么有效

Stats Engine可以实时提供统计上相关的结果,因此您的团队可以做出更快的决策。让您的整个团队进行试验,并始终观察最好的主意,无论它来自何方。

FullStack sec3 2

实时进行更新

实时远程更新您的应用程序和实验-绕开复杂而漫长的发布周期。

平台页面全栈UI

专为工程师打造的实验平台

开放平台

具有可插拔组件的开源SDK使您可以控制网络活动并与自己的分析管道集成。

快速决策引擎

在对性能至关重要的代码路径中进行实验。我们的SDK将用户存储在内存中,因此实验对延迟没有影响。

可扩展架构

全球成千上万的客户使用实时事件收集服务器,您可以立即获得实验结果。

阅读文档
                      
              import optimizely
              
              optimizely = optimizely.Optimizely(datafile)
              
              

# Activate an experiment

variation = optimizely.activate('my_experiment', 'user_123') if variation == 'variation_a':

# Execute code for variation A

elif variation == 'variation_b':

# Execute code for variation B

else:

# Execute default code

# Track an event

optimizely.track('purchase_completed', 'user_123')
                      
              import com.optimizely.ab.Optimizely;
              
              Optimizely optimizely = Optimizely.builder(datafile).build();
              
              

// Activate an experiment

Variation variation = optimizely.activate("my_experiment", "user_123"); if (variation != null) { if (variation.is("variation_a")) {

// Execute code for variation A

} else if (variation.is("variation_b")) {

// Execute code for variation B

} } else {

// Execute default code

}

// Track an event

optimizely.track("purchase_completed", "user_123");
                      
              import "optimizely"
              
              project = Optimizely::Project.new(datafile)
              
              

# Activate an experiment

variation = project.activate('my_experiment', 'user_123') if variation == 'variation_a'

# Execute code for variation A

elsif variation == 'variation_b'

# Execute code for variation B

else

# Execute default code

end

# Track an event

project.track('purchase_completed', 'user_123')
                      
              var optimizely = require('optimizely-server-sdk');
              
              var optimizely = optimizely.createInstance({ datafile: datafile });
              
              

// Activate an experiment

var variation = optimizely.activate('my_experiment', 'user_123'); if (variation === 'variation_a') {

// Execute code for variation A

} else if (variation === 'variation_b') {

// Execute code for variation B

} else {

// Execute default code

}

// Track an event

optimizely.track('purchase_completed', 'user_123');
                      
              use Optimizely\Optimizely;
              
              

// Initialize an Optimizely client

$optimizelyClient = new Optimizely($datafile);

// Activate an experiment

$variation = $optimizelyClient->activate('my_experiment', 'user_123'); if ($variation == 'variation_a') {

// Execute code for variation A

} elseif ($variation == 'variation_b') {

// Execute code for variation B

} else {

// Execute default code

}

// Track an event

$optimizelyClient->track('purchase_completed', 'user_123');
                      
              using OptimizelySDK;
              
              

// Initialize an Optimizely client

Optimizely OptimizelyClient = new Optimizely(datafile);

// Activate user in an experiment

var variation = OptimizelyClient.Activate("my_experiment", userId); if (variation != null) { if (variation == "control") {

// Execute code for variation A

} else if (variation == "treatment") {

// Execute code for variation B

} } else {

// Execute default code

}

// Track conversion event

OptimizelyClient.Track("my_conversion", userId);
                      
              var optimizely = require('optimizely-client-sdk');
              

// Initialize an Optimizely client

var optimizelyClientInstance = optimizely.createInstance({ datafile: datafile });

// Alternatively, if you don't use CommonJS or npm, you can install the minified snippet and use the globally exported varible as follows

var optimizelyClientInstance = window.optimizelyClient.createInstance({ datafile: datafile });

// Activate user in an experiment

var variation = optimizelyClientInstance.activate('my_experiment', userId); if (variation === 'control') {

// Execute code for variation A

} else if (variation === 'treatment') {

// Execute code for variation B

} else {

// Execute default code

}

// Track conversion event

optimizelyClientInstance.track('my_conversion', userId);
                      
              

// Initialize an Optimizely manager

OPTLYManager *optlyManager = [OPTLYManager init:^(OPTLYManagerBuilder * _Nullable builder) { builder.projectId = @"projectId"; }];

// Initialize an Optimizely client by asynchronously downloading the datafile

[optlyManager initializeWithCallback:^(NSError * _Nullable error, OPTLYClient * _Nullable client) {

// Activate user in a test

OPTLYVariation *variation = [client activate:@"my_experiment" userId:@"userId"]; if ([variation.variationKey isEqualToString:@"control"]) {

// Execute code for the control

} else if ([variation.variationKey isEqualToString:@"treatment"]) {

// Execute code for the treatment

} else {

// Execute default code

}

// Track conversion event

[client track:@"my_conversion" userId:@"userId"]; }];
                        
              

// Initialize an Optimizely manager

let optimizelyManager : OPTLYManager? = OPTLYManager.init {(builder) in builder!.projectId = "projectId" }

// Initialize an Optimizely client by asynchronously downloading the datafile

optimizelyManager?.initialize(callback: { [weak self] (error, optimizelyClient) in

// Activate user in a test

if let variation = optimizelyClient?.activate("my_experiment", userId: "userId") { if (variation.variationKey == "control") {

// Execute code for the control

} else if (variation.variationKey == "treatment") {

// Execute code for the treatment

} } else {

// execute default code

}

// Track conversion event

optimizelyClient?.track("my_conversion", userId: "userId") })
                          
              import com.optimizely.ab.Optimizely;
              
              Optimizely optimizely = Optimizely.builder(datafile).build();
              
              

// Activate an experiment

Variation variation = optimizely.activate("my_experiment", "user_123"); if (variation != null) { if (variation.is("variation_a")) {

// Execute code for variation A

} else if (variation.is("variation_b")) {

// Execute code for variation B

} } else {

// Execute default code

}

// Track an event

optimizely.track("purchase_completed", "user_123");

全栈构建更好的产品

诸如Blue Apron和Stubhub之类的公司正在使用优化全栈来更快地制造更好的产品,并且风险更低。了解这些产品团队如何在整个产品开发过程中进行实验。

在您的开发过程中快速制作原型

通过结合使用Optimizely Web和优化全栈来验证新想法,以运行涂漆的门测试,构建原型或针对不同的设计运行重定向测试。

服务器端实验的完整解决方案

  • 功能标记

    在运行时轻松启用,禁用,隐藏或推出产品功能。选择谁可以使用新功能。

  • 即时更新

    实时更新实验和变量,而无需等待下一个App Store版本。

  • 分阶段推出

    首先将其推出给一小部分随机或有针对性的用户,以降低启动新功能的风险。

  • 听众

    定义自定义属性以实现细粒度的定位和细分。

  • 允许清单

    通过强制特定用户进行变更来快速进行质量检查实验。

  • 流量分割

    在应用程序中的任何位置轻松创建随机流量开关,而不会影响性能。

  • 环境环境

    在开发,登台和生产环境中管理实验。

  • 事件追踪

    在您的应用程序或任何其他服务中监控所有您关注的转化指标和KPI。

  • 自定义配置

    轻松交换自己的组件以进行日志记录,错误处理,事件分派,集成等。

  • 多通道实验

    设置您自己的用户ID,以在所有客户渠道中创建一致的个性化体验。

  • 原始事件导出

    从Optimizely轻松下载完整的事件数据。

  • 优化统计引擎

    借助全球领先的实验平台实时查看实验的影响。

  • 企业就绪的安全性

    角色和权限,2要素身份验证和单点登录(SSO)。

  • 帐户级实验

    在尝试客户帐户时,确保一致的体验; (可选)根据帐户ID而不是用户ID划分流量。

现在,我们可以在几天之内从Optimizely Results Dashboard得到早期信号,而在此之前,我们的分析团队中的某人需要花费数周甚至更长的时间才能提取数据并了解正在发生的事情。
约翰·克莱恩

工程主管

立即开始在您的堆栈中进行实验