我在一个项目中,我必须在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_rand
在rand()
使用的libc随机数生成器上使用了一个Mersenne Twister。
你可以从php.js库中获得一个等价的javascript mt_rand()
。