【问题标题】:Best way to load content with a probability以概率加载内容的最佳方式
【发布时间】:2013-05-11 12:17:07
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: php random probability


    【解决方案1】:

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

    <?php if (mt_rand(1, 100) === 100): ?>
    
    // pure html content here
    
    <?php endif ?>
    

    编辑:

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

    【讨论】:

    • In other words if the page is loaded 100 times, I would expect my special piece of content to have appeared once. 在你的情况下它只是随机的.. 它可以多次显示特殊内容
    • 那么,它必须在 100 次加载中最多加载 1 次?这是所有负载还是每个 IP 的负载?
    • 我不知道,这不是问题:)
    【解决方案2】:

    鉴于此声明,我不会寻求 rand 解决方案:

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

    您可能永远无法从 rand(0,100) 获得 99。

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

    【讨论】:

      【解决方案3】:

      其实这与 PHP 无关,更多的是关于做它的策略。

      如果您需要它恰好出现在 1% 的视图中,您可以在 Redis 或 Memcached 或数据库中使用计数器。 - 如果您的目标是准确控制视图数量,那就太好了。 - 注意。如果您使用 Redis 或 Mamcached,您的计数器将在服务器或服务重启后重置。

      您使用 rand() 提出的建议同样适用,但会接近 1%,但不完全是 1%。实际上,从长远来看,它将接近 1%。 - 更快,因为不需要访问 redis/memcached/database; - 会更随机地出现,而不是每 100 次查看。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多