在基于 Cloudflare Worker 构建缓存与加速体系后,仅凭"访问感觉"很难判断系统是否真正达到了预期效果。
因此,需要一套可量化、可复现、覆盖多地区的测试方案,用于验证:
- 请求是否命中 CDN
- Worker 内部缓存是否生效
- 不同地区的访问延迟是否稳定
- 缓存是否在版本切换或失效后按预期恢复
本文整理了一套在实际工程中常用、且成本可控的测试与验证方法。
一、通用性能与缓存命中率检测工具
这一类工具适合做外网真实采样 或分布式访问模拟,用于评估用户真实访问体验。
1. WebPageTest
WebPageTest 是验证 Cloudflare Worker 性能和缓存状态的核心工具之一。
主要能力:
- 支持全球多个测试节点
- 支持自定义请求 Header(包括 Cookie)
- 可查看完整 HTTP 响应头(如
CF-Cache-Status) - 可进行多次测试,观察平均值和波动范围
使用建议:
- 选择多个地理节点,例如:
- 美国东部 / 美国西部
- 新加坡 / 香港
- 欧洲
- 请求站点首页或关键页面
- 重点关注以下指标:
CF-Cache-Status- Time to First Byte(TTFB)
通过这些指标可以判断:
- 是否已被 CDN 命中
- 是否在 Worker 执行之前就返回响应
- 不同地区是否存在明显延迟差异
访问地址:https://www.webpagetest.org/
2. Uptrends
Uptrends 更适合用于持续监控 和趋势观察。
主要特点:
- 提供大量全球监控节点
- 支持自定义请求 Header
- 可设置固定监控周期
- 可查看 HTTP 响应头信息
典型使用方式:
- 配置多个全球节点(例如 10~15 个)
- 设置每 5 分钟或更长周期进行一次检测
- 重点监控
CF-Cache-Status
这种方式可以观察:
- CDN 缓存命中是否稳定
- 是否在特定时间段频繁出现 MISS
- 不同区域的缓存热度差异
访问地址:https://www.uptrends.com/
3. Pingdom / GTmetrix
Pingdom 和 GTmetrix 主要用于页面性能监控。
它们的特点是:
- 可获取页面加载指标
- 支持查看响应头
- 提供多个测试区域
虽然节点数量和灵活性不如 WebPageTest,但用于区域对比和基础性能验证已经足够。
4. curl + 自定义脚本
对于工程团队来说,curl 是最可控、最透明的工具。
示例:
plain
curl -I https://www.example.com/ \
-H "User-Agent: test" \
-H "Cookie: env_code=online"
通过脚本可以实现:
- 不同地区(结合代理或云主机)
- 不同 Header
- 不同版本参数
并统计以下指标:
CF-Cache-Status- 自定义的
X-Cache X-Cache-VersionX-Cache-Env- 总耗时(Time)
进一步可计算:
- 缓存命中率
- 平均响应时间
- 最快 / 最慢请求
二、专门用于检测 CDN 缓存命中的工具
这一类工具的目标非常明确:
判断某个 URL 在全球各个 CDN 节点是否已经命中缓存。
1. CDNPlanet CDN Tester
功能特点:
- 输入 URL 即可测试
- 覆盖多个 CDN POP(Point of Presence)
- 返回每个节点的 HTTP 响应头
适合快速判断:
- 是否已经全球铺缓存
- 哪些区域仍然是 MISS
访问地址:https://cdnplanet.com/tools/cdn-test/
2. KeyCDN Header Checker
KeyCDN 的 Header Checker 非常适合做缓存一致性验证。
主要能力:
- 多节点并发测试
- 清晰展示每个节点的响应头
- 非常直观地观察 HIT / MISS 分布
访问地址:https://tools.keycdn.com/http2-test
3. Updown.io
Updown.io 更偏向于长期可用性与趋势监控:
- 定期请求指定 URL
- 支持自定义 Header
- 提供历史数据与趋势视图
适合用于:
- 长期观察缓存命中率变化
- 结合版本发布、缓存失效策略进行分析
访问地址:https://updown.io/
三、分布式压力与性能测试工具
当需要模拟高并发或突发流量时,可以使用压力测试工具:
| 工具 | 特点 | 适合用途 |
|---|---|---|
| k6 | 脚本化 | 压测 Worker 路径与缓存压力 |
| Artillery | JavaScript 配置 | 轻量级压力测试 |
| Locust | Python | 分布式压测 |
| BlazeMeter | 云服务 | 大规模流量模拟 |
| Loader.io | SaaS | 快速验证缓存承载能力 |
这类工具更适合在系统稳定后用于容量评估。
四、核心指标与对应检测方式
| 指标 | 检测方式 | 推荐工具 |
|---|---|---|
| CDN 是否命中 | 查看 CF-Cache-Status: HIT |
WebPageTest / KeyCDN / curl |
| Worker 缓存是否命中 | 查看 X-Cache: HIT |
curl / 自定义脚本 |
| TTFB 延迟 | 时延测量 | WebPageTest / Pingdom / curl |
| 全球命中分布 | 多地区对比 | CDNPlanet / Uptrends |
| 缓存失效与恢复 | 定时重复请求 | 自定义脚本 / Updown.io |
五、测试示例
示例一:使用 curl 获取首页缓存状态
plain
curl -I https://www.example.com/ \
-H "Cookie: env_code=online" \
-w "\n%{time_total}s\n"
可能的输出结果:
plain
HTTP/2 200
CF-Cache-Status: HIT
X-Cache: HIT
...
0.092s
说明:
- CDN 已命中
- Worker 内部缓存已命中
- 总延迟低于 100ms
示例二:多 URL 批量检测脚本
plain
#!/bin/bash
urls=(
"https://www.example.com/"
"https://www.example.com/about"
)
for url in "${urls[@]}"; do
echo "Checking: $url"
curl -s -D - "$url" -o /dev/null \
-H "Cookie: env_code=online" \
| egrep "CF-Cache-Status|X-Cache"
echo ""
done
输出示例:
plain
CF-Cache-Status: HIT
X-Cache: HIT
六、缓存命中率测试策略建议
- 全局预热
在正式观察数据前,先从多个地区访问核心路径,避免冷启动干扰结果。 - 建立基准值(Baseline)
在预热前后分别记录命中情况与 TTFB,例如:
| 地区 | 命中状态 | TTFB |
|---|---|---|
| US-East | HIT | 80ms |
| Singapore | HIT | 40ms |
| Europe | MISS | 150ms |
- 持续监控
对关键页面进行周期性检测,覆盖:- 高峰时段
- 低峰时段
- 核心访问地区
- 与版本切换联动观察
在缓存版本更新或失效后:- 观察 MISS 是否符合预期
- 统计重新命中所需时间窗口