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

8