以概率加载内容的最佳方式

时间:2013-05-16 14:31:03

标签: php random probability

我正在我的网站上进行一些A / B测试,由于各种原因,我需要为1%的页面加载显示某段内容。换句话说,如果页面加载了100次,我希望我的特殊内容出现一次。

使用PHP,最好的方法是什么?

我可以使用rand()函数并执行if (rand(0,1)>=0.99){//Show content}

之类的操作

但是有更好或更可靠的方式吗?

3 个答案:

答案 0 :(得分:1)

实际上它不是关于PHP的,而是关于这样做的策略。

如果您需要它完全显示1%的视图,您可以使用Redis或Memcached的计数器或数据库中的计数器。 - 如果您的目标是精确控制视图数量,那就太好了。 - NB。如果您使用Redis或Mamcached,您的计数器将在服务器或服务重新启动后重置。

你建议使用rand()的工作方式相同,但是接近1%但不是1%。实际上从长远来看,它将接近1%。 - 更快,因为不需要访问redis / memcached / database; - 将更随机地出现,而不是每100个视图。

答案 1 :(得分:0)

我在我开发的网站上做了类似的事情并且工作得很好。 PHP是服务器端,因此它的可靠性与您将获得的一样。我会这样做:

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

// pure html content here

<?php endif ?>

编辑:

可执行性的本质意味着,给定足够大的样本mt_rand(1, 100)将生成数字匹配,您正在寻找1%的时间。您可以使用花哨的数据库或平面文件来强制赔率,但这是不必要的,因为您只需要信任正确生成赔率的mersenne twister

答案 2 :(得分:0)

鉴于此声明,我不会选择兰德解决方案:

  

换句话说,如果页面被加载了100次,我希望我的特殊内容会出现一次。

你可能永远不会从兰特(0,100)获得99.

创建一个非常简单的数据库表,其中包含一列 - counter - 并在每次点击时更新它。每次计数器达到100的倍数时包括该段代码。