我想显示一个div只占我网站流量的20%,所以我做了这个逻辑:
var div = (Math.floor(Math.random() * 100) + 1) > 20 ? true : false;
if (div)
// don't show
else
// show
但我不认为这是准确的,是吗?
谢谢。
答案 0 :(得分:3)
对于所有随机性,需要有足够大的样本大小才能显示正态分布。如您所见,您获得的访问者越多,该功能就越接近20%
。
function visitors(n) {
var visited = 0;
for (var i = 0; i < n; i++)
visited += (Math.floor(Math.random() * 100) + 1) > 20 ? 0 : 1;
console.log("Out of " + n + " visitors, " + visited + " were shown the div. (" + visited / n * 100 + "%)");
}
[1, 10, 100, 1000, 10000, 100000, 1000000].forEach(x => visitors(x));
正如Radmation提到的那样,使用服务器可以为更少的访问者提供更接近20%
的内容。
我不会使用客户端逻辑,但服务器端逻辑。您可以逐字递增服务器端变量,每次到达5时重置它并告诉客户端显示div。当然,在这种情况下从1开始。如果你需要至少准确 - &gt;你可以使用ajax获取计数器值 - 如果你一次遇到多个请求。