Next.js 15 边缘 A/B 测试与金丝雀发布实践概述利用 Edge Middleware 做分桶与实验流量路由,结合 Cookies 标记用户组与指标上报,形成闭环的 A/B 测试与金丝雀发布体系。分桶与 Cookies 标记// middleware.ts(简化)
import { NextResponse } from 'next/server'
import type { NextRequest } from 'next/server'
function getBucket(id: string) { return (parseInt(id.slice(-2), 36) % 10) < 2 ? 'B' : 'A' } // 20% B 组
export function middleware(req: NextRequest) {
const url = req.nextUrl.clone()
const cookie = req.cookies.get('ab_bucket')?.value
const uid = req.cookies.get('uid')?.value || crypto.randomUUID()
const bucket = cookie || getBucket(uid)
url.searchParams.set('ab', bucket)
const res = NextResponse.rewrite(url)
res.cookies.set('uid', uid)
res.cookies.set('ab_bucket', bucket, { maxAge: 60 * 60 * 24 * 30 })
return res
}
export const config = { matcher: ['/((?!_next|static|api).*)'] }
页面内实验变体export default function Page({ searchParams }: { searchParams: { ab?: string } }) {
const variant = searchParams.ab === 'B' ? 'B' : 'A'
return variant === 'B' ? <NewLayout /> : <OldLayout />
}
指标上报与决策// 客户端
export function report(ab: 'A' | 'B', metric: { name: string; value: number }) {
navigator.sendBeacon('/api/metrics', JSON.stringify({ ab, ...metric }))
}
PPR/RSC 协同变体内容静态化(`force-static`)与缓存标签统一,避免多变体下的缓存污染;实验结束后清理 Cookies 与缓存。技术参数与验证分桶比例可配置;实验误差控制;数据收敛后自动回滚或放量。注意事项隐私与合规;避免将敏感标识暴露给第三方;对 SEO 重要页面避免实验导致索引混乱。参考资料Next.js Middleware 文档;A/B 与金丝雀发布最佳实践。---发布信息:已发布 · 技术验证 · 阅读 34 分钟 · CC BY-SA 4.0

发表评论 取消回复