2013-05-16 2 views
1

Я занимаюсь тестированием A/B на моем сайте, и по разным причинам мне нужно, чтобы определенный фрагмент контента отображался на 1% загрузки страницы. Другими словами, если страница загружается 100 раз, я ожидаю, что моя специальная часть контента появится один раз.Лучший способ загрузить контент с вероятностью

Использование PHP, что является лучшим способом сделать это?

Я мог бы использовать функцию RAND() и сделать что-то вроде if (rand(0,1)>=0.99){//Show content}

Но есть лучший и более надежный способ?

ответ

0

Я сделал что-то подобное на сайте, который я разработал, и он отлично работает. PHP - это серверная сторона, поэтому она настолько же надежна, как и вы. Я хотел бы сделать это следующим образом:

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

// pure html content here 

<?php endif ?> 

EDIT:

Сама природа prabability означает, что при достаточно большой выборке mt_rand(1, 100) будет генерировать матч номер, который вы ищете 1% времени. Вы можете делать фантастические базы данных или плоские файлы, чтобы заставить шансы, но это не нужно, так как вам просто нужно доверять mersenne twister, который правильно генерирует ваши шансы.

+0

'Другими словами, если страница загружается 100 раз, я ожидаю, что моя специальная часть контента появится однажды.« В вашем случае это просто случайный .. Он может показывать специальный контент несколько раз –

+0

Итак, он должен загружать только максимум 1 раз в 100 загрузок? Это все нагрузки или нагрузки на IP? –

+0

Не знаю, это не вопрос :) –

1

На самом деле речь идет не о PHP, а о стратегии его выполнения.

Если вам нужно, чтобы он отображался точно для 1% просмотров, вы можете использовать счетчики с Redis или Memcached или в своей базе данных. - хорошо, если ваша цель - точно контролировать количество просмотров. - NB. если вы используете 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

Я бы не пойти на ранда-решения, учитывая это утверждение:

Другими словами, если страница загружается в 100 раз, я ожидал бы особую часть содержания, появились один раз.

Вы, возможно, никогда не получите 99 от ранда (0,100).

Создайте очень простую таблицу базы данных с одним столбцом - counter - и обновите ее каждый удар. Включите кусок кода каждый раз, когда счетчик обращается к кратным 100.

Смежные вопросы