Каков наиболее идеальный междисциплинарный метод разделения A / B? - PullRequest
2 голосов
/ 06 июля 2011

Я нахожусь в проекте, где мне нужно реализовать A / B-разбиение в 15 или около того видах, в данном случае для PHP - мы хотели бы использовать ту же математику, если это возможно для наших проектов JavaScript.

Каков наиболее идеальный, наименее многословный и наименее ресурсоемкий способ сделать это? Для этого проекта мне просто нужно установить переменную: что-то вроде:

// 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 ]

2 голосов
/ 06 июля 2011

Я предполагаю, что разделение A / B должно быть согласованным для всех пользователей, поэтому пользователь должен постоянно попадать в сегмент A или B (если нет, ваш анализ сегментов A / B не выявит никакой информации, связанной сна страницу навигации).

Следовательно, использование функции rand, вероятно, не то, что вам нужно.

Вместо этого используйте идентификатор сеанса, сеансовый файл cookie или постоянный файл cookie, и просто используйте последние 3 байта этогоcookie вместо вашего случайного значения.Вы можете добавить байты или умножить их значения ascii, чтобы сгенерировать число, которое вы можете использовать в качестве отсечки.

Это будет очень переносимо для PHP и JS, дешево в ЦП и легкопроверить правильность в модульном тесте.

2 голосов
/ 06 июля 2011

наименее ресурсоемкий способ:

  • используйте датчик изображения (в идеале CMOS), чтобы получить очень длинную экспозицию черного цвета.
  • Вы получите много действительно случайного шума из-за световых помех и нагрева датчика
  • биты в несжатом изображении будут полностью случайными

У команды есть что-то вроде 200 Гб / с случайных данных вроде этого:)

Тогда просто:

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

: D

1 голос
/ 10 июля 2011

Вы должны использовать mt_rand() сверх rand().Это в 4 раза быстрее, чем rand(), потому что mt_rand использует Mersenne Twister вместо генератора случайных чисел libc, который rand() использует (см. php.net ).

Затем вы можете получить эквивалент mt_rand() для javascript из библиотеки php.js .

...