A/B测试

更新时间: 2024-04-07 10:34:08

本文介绍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