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

时间:2011-07-06 19:00:20

标签: php javascript jquery math coding-style

我正在进行一个项目,我必须在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个左右的开发人员,我们都有自己的方式 - 什么是最好的,经过基准测试的方式?

3 个答案:

答案 0 :(得分:2)

最少cpu密集的方式:

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

团队获得了类似200Gb /秒的随机数据:)

然后简单地说:

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

:d

答案 1 :(得分:2)

我认为A / B拆分需要在所有用户之间保持一致,因此用户应始终属于A或B桶(如果不是,您对A / B桶的分析将不会显示任何相关信息页面导航)。

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

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

这在PHP和JS中非常便携,并且它在CPU中便宜并且在单元测试中易于验证正确性。

答案 2 :(得分:1)

您应该使用mt_rand()而不是rand()。它比rand()快4倍,因为mt_rand使用Mersenne Twister而不是rand()使用的libc随机数生成器(请参阅php.net)。

然后,您可以从php.js library获取与mt_rand()相当的javascript。