2011-07-06 2 views
2

저는 15 개 정도의 뷰에서 A/B 분할을 구현해야하는 프로젝트에 있습니다.이 경우 PHP에서 가능합니다. 가능한 경우 JavaScript 프로젝트에서 동일한 수학을 사용하고 싶습니다.A/B 스플릿을 실행하는 가장 이상적인 언어 간 방법은 무엇입니까?

이 작업을 수행하는 데있어 가장 이상적이며 최소한의 정보, 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 개 정도의 devs 여기있는 우리 모두는 우리의 방법이 - 최고의 벤치 마크에서 검증 된 방법은 무엇인지?

+2

'i % 2' 또는 오히려'1 & i'은 더 빠릅니다 (예, 농담입니다). –

+0

Unbiased and 50/50? – hakre

+0

@hakre - 프로그래밍에서 결코 진정한 '무작위'가없는 법을 알고 있습니다. 그것은 단지 계산 및 알고리즘 일 뿐이며 임의의 계산에는 특정 결과에 유리한 확률이 있습니다. – AlienWebguy

답변

1

mt_rand()rand() 이상 사용해야합니다. mt_randrand() (php.net 참조)의 libc 난수 생성기보다 Mersenne Twister을 사용하기 때문에 rand()보다 4 배 빠릅니다.

그러면 php.js library에서 자바 스크립트에 해당하는 mt_rand()을 얻을 수 있습니다.

+0

Perfect. 정확히 내가 무엇을 찾고 있었는지. 감사! – AlienWebguy

2

이상의 CPU 집약적 인 방법 :

  • 블랙의 매우 긴 노출을 위해 이미지 센서 (이상적 CMOS)를 사용한다.
  • 당신 때문에 압축되지 않은 이미지의 비트와 같은 임의의 데이터/초

팀은 200GB처럼 뭔가있어 완전히 무작위로 될 것입니다

  • 빛의 간섭 및 센서 열을 진정으로 랜덤 노이즈를 많이 얻을 것이다 이것은 단순히 그런

    을 :) :

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

    : D

  • +0

    와우. 재미 있은 코멘트 * 및 * 우스운 응답. – GolezTrol

    +0

    완벽하게 유효한 답변입니다. 그것은 장황하지 않다. CPU가 아닌 CPU를 집중적으로 사용하며, 임의의 정상적인 알고리즘이 될 수는 없다. 이상적이다. D –

    +0

    예.하지만이 이미지를 읽을 수있는 배열의 이미지 데이터 비트를 얻는 것은 매우 불충분하다. 방법. – GolezTrol

    2

    A/B 스플릿이 모든 사용자에게 일관성을 유지해야하므로 사용자가 계속해서 A 또는 B 버킷에 있어야한다고 가정합니다 (그렇지 않은 경우 A/B 버킷 분석에서 페이지와 관련된 정보를 공개하지 않음). 항해).

    따라서 rand 함수를 사용하면 아마도 원하는 것이 아닙니다.

    대신 세션 식별자, 세션 쿠키 또는 영구 쿠키를 사용하고 무작위 값 대신 해당 쿠키의 마지막 3 바이트 만 사용하면됩니다. 바이트를 추가하거나 아스키 값을 곱하여 컷오프로 사용할 수있는 숫자를 생성 할 수 있습니다.

    이것은 PHP와 JS에서 매우 이식성이 뛰어나며 CPU가 저렴하고 단위 테스트에서 정확성을 쉽게 확인합니다.

    관련 문제