执行A/B分割的最理想的跨语言方法是什么?


What is the most ideal, cross-language method of executing an A/B split?

我在一个项目中,我必须在15个左右的视图中实现a/B分割,在这种情况下是PHP -如果可能的话,我们希望在JavaScript项目中使用相同的数学。

最理想、最不冗长、cpu消耗最少的方法是什么?对于这个项目,我只需要设置一个变量:类似于:

// In the main controller
if(rand(1, 2) == 2)
{
    $recipe = 'program';
}
else
{
    $recipe = 'standard';
}
define('RECIPE',$recipe);

// In the view
$program = (RECIPE == 'program') ? '&ProgramOfInterest=' . $program_id : '';

我们这里有20个左右的开发人员,我们都有自己的方法-什么是最好的,经过基准验证的方法?

cpu占用最少的方法:

  • 使用图像传感器(理想情况下是CMOS)拍摄长时间曝光的黑色。
  • 由于光干扰和传感器热量,你会得到很多真正随机的噪音
  • 未压缩图像中的位将完全随机

一个团队得到了200Gb/秒的随机数据,就像这样:)

那么简单:

var counter = 0;
if(imageBit[counter++]){
D

:

我假设A/B分割需要在所有用户中保持一致,因此用户应该始终属于A或B桶(如果不是,您对A/B桶的分析将不会揭示任何与页面导航相关的信息)。

因此使用rand函数可能不是你想要的。

使用会话标识符,会话cookie或持久cookie,并简单地使用该cookie的最后3个字节而不是您的随机值。您可以将字节相加或将它们的ascii值相乘以生成一个数字,您可以使用该数字作为截止值。

这将是非常可移植的PHP和JS,它是廉价的CPU和容易验证正确性的单元测试。

您应该使用mt_rand()而不是rand()。它比rand()快4倍,因为mt_randrand()使用的libc随机数生成器上使用了一个Mersenne Twister。

你可以从php.js库中获得一个等价的javascript mt_rand()