2013-05-16 3 views
1

광산 사이트에서 일부 A/B 테스트를하고 있는데, 다양한 이유 때문에 페이지로드의 1 %에 대해 특정 콘텐츠가 필요합니다. 즉, 페이지가 100 번로드되면 내 특수한 콘텐츠가 한 번 나타나기를 기대합니다.확률로 콘텐츠를로드하는 가장 좋은 방법

PHP를 사용할 때 가장 좋은 방법은 무엇입니까?

나는 랜드() 함수를 사용하고 if (rand(0,1)>=0.99){//Show content}

같은 일을하지만 더 이상 신뢰할 수있는 방법이 있을까?

답변

0

내가 개발 한 사이트에서 이와 비슷한 작업을했으며 완벽하게 작동합니다. PHP는 서버 쪽이므로 여러분이 얻게 될만큼 안정적입니다. 나는 이런 식으로 할 것 :

<?php if (mt_rand(1, 100) === 100): ?> 

// pure html content here 

<?php endif ?> 

편집 :

prabability의 본질은 의미 당신은 시간의 1 % 찾고있는 번호 일치를 생성하는 충분한 샘플 mt_rand(1, 100)을 부여. 확률을 높이기 위해 멋진 데이터베이스 나 플랫 파일을 만들 수는 있지만, 확률이 올바르게 발생하는 mersenne twister을 신뢰하기 만하면되므로 불필요합니다.

+0

즉, 페이지가 100 번로드되면 내 특수한 내용의 내용이 한 번 나타나기를 기대합니다. .. 특수 컨텐츠를 여러 번 표시 할 수 있습니다. –

+0

그래서 100 개의로드에서 최대 하나의 시간 만로드해야합니까? IP 당로드 또는로드가 모두 있습니까? –

+0

나도 몰라, 그것은 질문에 없습니다 :) –

1

사실 그것은 PHP에 관한 것이 아니라 그것을하는 전략에 관한 것입니다.

보기의 1 %에 정확하게 나타나야하는 경우 Redis 또는 Memcached 또는 데이터베이스에서 카운터를 사용할 수 있습니다. -보기의 수를 정확하게 제어하려는 경우에 적합합니다. -주의 사항. Redis 또는 Mamcached를 사용하면 서버 또는 서비스를 다시 시작한 후에 카운터가 재설정됩니다.

rand()에서 제안한 것은 같은 우물을 사용하지만 1 %에 가깝지만 1 %는 아닙니다. 사실 장기적으로 볼 때 1 % 가까이 움직일 것입니다. - redis/memcached/database에 대한 액세스가 필요하지 않으므로 빠릅니다. - 정확히 100 번째보기가 아닌 임의로 표시됩니다.

0

나는 데이터베이스 나 파일에 카운터를 사용할 것이다.

if(counter++ % 100 === 0) { // if var counter modulo 100 equals 0 (every 100 times) 
    // load special piece?` 
} 
// Save counter somewhere 
0
나는이 문장 지정되면 (자), 랜드-솔루션을 갈 것

: I 콘텐츠의 나의 특별한 조각을 기대하는 페이지가 100 번로드 된 경우 즉

가 등장합니다 일단.

rand (0,100)에서 99를 얻지 못할 수도 있습니다.

하나의 열 (counter)을 가진 매우 간단한 데이터베이스 테이블을 만들고이를 히트 할 때마다 업데이트하십시오. 카운터가 100의 배수에 도달 할 때마다 코드 조각을 포함 시키십시오.