介绍
PlanOut 是一个 Facebook 开源的用于 A/B 测试、流量分配等场景下进行随机化实验的工具。PlanOut 允许你在 JavaScript 中写实验配置,并提供了一套通用的实验控制台,让你可以轻松地管理和监测实验。
npm 提供了 PlanOut 的 JavaScript 实现包 planout
,该包支持 Node.js 和浏览器环境。
本文将介绍如何使用 planout
包来进行实验设计和配置。我们会从安装 planout
开始,逐步讲解如何定义实验、生成随机数、读取实验变量值等操作。
安装
你可以通过 npm 安装 planout
:
npm install planout
也可以通过 CDN 引入:
<script src="https://cdn.jsdelivr.net/npm/planout"></script>
定义实验
首先,我们需要定义一个实验。一个典型的实验包含若干个参数,每个参数有一个默认值和若干种可能的取值。我们要在这些可能的取值之间进行随机分配。
以下是一个简单的实验定义示例:
-- -------------------- ---- ------- ----- ------------ - --- ---------------------------------- - ----------- - ------------ - -------- ---------- ---------- ----------- ---------- ----------- ------- ------- -- ----------- - -------- ------ ---- ---------- ------- ---- ---- ----- ------ ------- ------- ------ - - ---
上述代码定义了一个名为 my_experiment
的实验,包含两个参数:buttonColor
和 buttonText
。其中 buttonColor
的默认值为红色(#ff0000
),可能的取值为红绿蓝(#ff0000
, #00ff00
, #0000ff
);buttonText
的默认值为 Click me
,可能的取值为 Click me
, Buy now
, Learn more
。
随机分配
我们可以使用 PlanOut 提供的算法来进行随机分配。以下是一个随机分配示例:
-- -------------------- ---- ------- ----- ------------ - --- ---------------------------------- - ----------- --- --- ----- ------ - -------- -- -- -- ----- ---- - ---------- -- --------------- -- --------- ----- ---------- - --- -------------------------------- -------- -- ------------ ------------------------------------- --- ---------------------------------- ---------- --------------------------------- ------- ------------------ ---- ------------------------------------ --- ---------------------------------- ---------- -------------------------------- ------- ------------------ ----
在上述示例中,我们首先创建了一个 Experiment
对象,并传入了实验定义对象 myExperiment
和用户 ID。然后,我们使用 UniformChoice
算法对参数进行随机分配。
读取实验变量值
在实验运行过程中,我们需要读取实验变量的值。以下是一个读取实验变量值的示例:
-- -------------------- ---- ------- ----- ------------ - --- ---------------------------------- - ----------- --- --- ----- ------ - -------- -- -- -- ----- ---- - ---------- -- --------------- -- --------- ----- ---------- - --- -------------------------------- -------- -- ---- ------------------------------------- --- ---------------------------------- ---------- --------------------------------- ------- ------------------ ---- ------------------------------------ --- -------------------------- - ----------------------------------------------------------- -------- ----------------------------------------------------------------------------------