本文介绍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对请求做分桶并返回不同的分组结果: