2011-07-06 9 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かそこらの開発者を持っているし、我々はすべて私たちのやり方を持っている - 最高のベンチマーク-実証済みの方法は何ですか?

+2

「i%2」、あるいは「1&i」は速いです(はい、私は冗談になります)。 –

+0

Unbiased 50/50? – hakre

+0

@hakre - あなたは、プログラミングにおいて真の「ランダム」が決してないことを知っています。これは単なる計算とアルゴリズムですが、ランダムな計算には一定の結果が得られる確率があります。 – AlienWebguy

答えて

1

mt_rand()rand()以上にする必要があります。 mt_randrand()よりも4倍速く、(php.net参照)のlibc乱数発生器よりMersenne Twisterが使用されているためです。

php.js libraryから、javacriptの場合はmt_rand()に相当します。

+0

パーフェクト。まさに私が探していたもの。ありがとう! – AlienWebguy

2

少なくともCPU集約方法:

  • 黒の非常に長い露光を取るために、イメージセンサ(理想的には、CMOS)を使用します。
  • あなたは光による干渉とセンサ熱
  • に真にランダムノイズの多くを得るでしょう、非圧縮画像のビットが完全にランダムになります

チームのようなランダムなデータの200GB /秒のようなものを得ましたこれは単に、その後

を:):

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

:D

+0

うわー。面白いコメント*と*面白い答え。 – GolezTrol

+0

これは完全に有効な回答です!それは冗長ではなく、___very ___ CPU以外の処理が集中しており、通常のアルゴリズムとはまったく無作為なので、理想的です。D –

+0

はい、しかし、これを読むことができる配列のイメージデータのビットを取得するのは非常にメモリ不足です方法。 – GolezTrol

2

A/B分割はすべてのユーザーで一貫している必要があるため、ユーザーは常にAまたはBバケットに落ちる必要があります(そうでなければ、A/Bバケットの分析ではページに関する情報は表示されませんナビゲーション)。

したがって、rand関数を使用するのはおそらくあなたが望むものではありません。

代わりに、セッション識別子、セッションCookie、永続的なCookieを使用し、ランダム値の代わりにそのCookieの最後の3バイトを使用します。バイトを追加したり、ASCII値を乗算して、カットオフとして使用できる数値を生成することができます。

これはPHPとJSで非常に移植性があり、単体テストではCPUが安く、正確性を検証するのが簡単です。

関連する問題