我正在进行一个项目,我必须在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个左右的开发人员,我们都有自己的方式 - 什么是最好的,经过基准测试的方式?
答案 0 :(得分:2)
最少cpu密集的方式:
团队获得了类似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。