A/B测试
本文介绍A/B测试示例场景及结果。
代码
async function handleRequest(request) {
const NAME = "var";
const TEST_RESPONSE = new Response("A group"); // Response内容也可以替换成fetch请求的动态内容
const CONTROL_RESPONSE = new Response("B group");
// 用Cookie中携带的var字段判断属于哪个分组
const cookie = request.headers.get("cookie");
if (cookie && cookie.includes(`${NAME}=B group`)) {
return CONTROL_RESPONSE;
}
else if (cookie && cookie.includes(`${NAME}=A group`)) {
return TEST_RESPONSE;
}
else {
// 如果没有Cookie,则选择一个
const group = Math.random() < 0.5 ? "A group" : "B group"; // 随机分桶
const response = group === "B group" ? CONTROL_RESPONSE : TEST_RESPONSE;
response.headers.append("Set-Cookie", `${NAME}=${group}; path=/`);
return response;
}
}
addEventListener("fetch", event => {
event.respondWith(handleRequest(event.request));
});
结果
ER对请求做分桶并返回不同的分组结果: